又一个 GitHub/GitLab Webhook 监听程序 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
RedL0tus
V2EX    程序员

又一个 GitHub/GitLab Webhook 监听程序

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

    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     Solana     2739 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 22ms UTC 08:32 PVG 16:32 LAX 01:32 JFK 04:32
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86