V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
RedL0tus
V2EX  ›  程序员

又一个 GitHub/GitLab Webhook 监听程序

  •  
  •   RedL0tus ·
    RedL0tus · 2019-04-26 07:20:50 +08:00 · 3891 次点击
    这是一个创建于 2021 天前的主题,其中的信息可能已经有所发展或是发生改变。

    Repo: https://github.com/RedL0tus/trigger

    嗯... 这是一个轮子,还是个氧化之后的轮子。

    应用场景

    在一些简单的场景下可以代替 CI 实现自动部署等等。

    之前用过一些别的监听 GitHub webhook 的程序,但是它们大多是 Python 或 Node 之类写的,跑在我的 256MB 内存的小鸡上面内存有点吃紧。正好我当时学了一下 Rust 就自己造了一个库和一个 CLI 程序出来。

    从写出来开始我就在我自己的一些别的坑上面用了,应该没什么大问题。

    其实一开始是用的别人的库写的,只能根据 GitHub 发来的请求执行对应的命令。后来发现当时用的那个库已经很久没更新了,迁移上新的依赖也跟重写一个差不多了(现在 Rust 的生态就有这么个问题,一大票 0.X 的库,API 老是改)。

    这两天我放假没事情干把库和程序完善了一下加了点功能,给程序发了个 1.0 版(因为我觉得可能有用的功能已经做出来了),过来打个广告。

    它能做什么

    • 同时支持监听来自 GitHub/GitLab 的请求。
    • 可选的有效性验证支持:
      • GitHub 使用 HMAC 算法进行签名,为此使用了来自 RustCrypto 的 hmacsha-1 两个 crate。
        • 库一开始是使用 ring 来做验证签名的功能的,但是 ring 有一部分是用 C 写的,使用 musl 的话会编译失败。至于为什么要用 musl 的话下面会说。
      • GitLab 直接把 token 放在 header 里面,直接比较就行。
    • 提供相对较多的配置选项。
    • 配置文件里可以直接写脚本(使用 run_script 这个 crate ),配合 jq 可以解析 request body。
    • Rust 本身的特点导致它应该能做到内存安全,大概不会出现漏内存之类的情况(我也不是很懂)。

    更多细节可以看 README。我英语和语文都不是很好还请各位大佬原谅(感觉我这中文 README 写得像是在丢中国人的脸)。

    安装方法

    愿意自己编译的话可以通过 rustup 安装 Rust 的工具链,然后使用 cargo install trigger 进行安装。

    如果机器配置太差或不想装工具链的话,release 页面里有使用 musl 静态链接的 Linux x86_64 的二进制可供下载(约 2.0MB )。

    (因为 Rust 默认配置下编译出来的二进制有点肥,我参照了 https://github.com/johnthagen/min-sized-rust 上的一些建议,然后使用了 musl 工具链静态链接,这样编译出来的二进制比用 glibc 动态链接的要小一点,又方便在不同发行版之间共用。)

    Windows 下我没测试过,但是这里使用的库应该都是纯 Rust 的所以理论上 Windows 下应该也能编译使用,就是配置文件里的 shell 脚本的语言会变成 Windows 的 cmd (根据 run_script 的 README )。

    (不过我想 Windows 上用这些的应该也不是很多?)

    装好之后建议再套一层 nginx 之类的逆向代理,因为我自己的喜好问题等等没给它做独立的 HTTPS 支持。


    这是我第一次把我写的东西拿出来打广告... 感觉有点不要脸(小声

    第 1 条附言  ·  2019-04-26 09:54:42 +08:00

    对比一下资源占用(依次为 VIRT, RES, SHR, CPU%, MEM%, TIME,来自两台 VPS 上的 htop)。 Node(我之前用的这个 https://github.com/fiddus/github-webhooks-listener):

    Node

    Trigger:

    Trigger

    性能的话其实对于 Webhook 这种情景不是很重要,毕竟一般压力不会太大(当然我也相信性能会更好)。

    4 条回复    2019-04-26 10:10:12 +08:00
    deviluser
        1
    deviluser  
       2019-04-26 07:41:28 +08:00 via Android   ❤️ 1
    uilvn
        2
    uilvn  
       2019-04-26 09:17:15 +08:00   ❤️ 1
    己赞
    luassuns
        3
    luassuns  
       2019-04-26 09:58:35 +08:00 via iPhone   ❤️ 1
    昨天刚开始想用 Rust 做,跟你的情况一样,小鸡顶不住。
    star star !
    yim7
        4
    yim7  
       2019-04-26 10:10:12 +08:00   ❤️ 1
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5557 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 01:30 · PVG 09:30 · LAX 17:30 · JFK 20:30
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.