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

[自个开开源] 响应 GitHub Webhooks 实现自动部署的 Web 服务

  •  
  •   quietjosen · 236 天前 · 2794 次点击
    这是一个创建于 236 天前的主题,其中的信息可能已经有所发展或是发生改变。

    今天研究并实现一个响应 GitHub Webhooks 实现自动部署的 Web 服务。

    简单收拾了下代码和文档(写文档比写代码累…),开源至此

    前提条件

    这并不是一个 Hello Word 教学示例,而是我自己在用的实际项目。假设你已经知道下列技术或满足其条件:

    • 有一台自己的服务器
    • 会配置域名
    • 会配置 nginx 或者其他 Web 服务器,实现 Web 服务至 node 服务的转发
    • 了解 node、koa
    • 了解 Webhooks
    • 了解 SMTP
    • 会编辑 shell 脚本

    主要功能

    • node lib/index.js 运行后,在 3030 端口提供可响应 GitHub Webhook 的服务
    • 内部通过 exec 来调用实际工作的 shell 脚本(需要自己编写)
    • 发邮件告知运行结果

    更多的,看 README 吧。

    第 1 条附言  ·  236 天前

    确实有重复造轮子的问题,也有维护的成本。如果有可能,还是建议大家用成熟的技术、第三方服务。

    一些选择及建议:

    • 比如,Travis CI,只是这家伙对 GitHub 私有项目收费价格太感人了。
    • GitHub 本身在测试 Actions 功能,应该覆盖包括 CI/CD 在内的需求。
    • GitLab 有全套的 CI/CD,几乎免费,可以尝试。

    其实,如果跳出来,直接上 Serverless,很多 CI/CD 的部分,压根就不存在了。

    第 2 条附言  ·  236 天前
    来来来,说说你自动部署用的什么方案,手动也算😄
    28 回复  |  直到 2019-03-25 17:38:20 +08:00
        1
    strugglexiang   236 天前 via Android
        2
    heybuddy   236 天前 via Android
    支持一下
        3
    ericgui   236 天前
    "command": "/bin/bash ./deploy.sh",


    这个 config 里的 deploy.sh 怎么没找到?
        4
    also24   236 天前
    @ericgui #3


    那里是留给你写部署用的脚本的
        5
    ericgui   236 天前
    @also24 谢谢
        6
    mritd   236 天前
    你这个有点太硬核了吧...为啥不用 travis ci ?
        7
    zzjas98   236 天前   ♥ 1
    支持,但是感觉重复造轮子了。之前写作业用过这个东西 https://github.com/adnanh/webhook,感觉和 lz 写的差不多
        8
    xlui   236 天前 via iPhone
    感觉像是超级简化版无图形界面版的 Jenkins
        9
    AngryPanda   236 天前 via Android
    webhooks 还是不够稳定
        10
    quietjosen   236 天前
    @mritd
    免费的不支持私有项目,收费 $69 每月起步:

        11
    quietjosen   236 天前
    @zzjas98 哈哈,原来还可以做成付费服务啊:
        12
    quietjosen   236 天前
    @xlui 如果可能,还是建议用成熟的第三方服务。我这个东西,就折腾了好几个小时。不过也看吧,至少折腾过程中学到了东西。
        13
    life1st   236 天前 via Android
    Nowsh 基本没见人提过
        15
    quietjosen   236 天前 via iPhone
    @Cbdy 嗯,本质上,就是提交后运行一个命令或脚本。真说的话,你这个不支持密码检验和配置仓库及分支。
        16
    quietjosen   236 天前 via iPhone
    @life1st 看着不错,瞧瞧去
        17
    ifwangs   236 天前 via Android
    caddy 好像就有 github 自动部署插件
        18
    quietjosen   236 天前
    @ifwangs 替换已有 Web 容器,侵入性太强,不适用已经成型的产品。
        19
    azh7138m   235 天前 via Android
    @life1st 我一直在用,其实免费额度只能自己开发用,1k 请求 /月的额度太低啦
        20
    thet   235 天前 via Android
    用的 jenkins
        21
    quietjosen   235 天前 via iPhone
    @azh7138m
    @life1st 简单试了下,貌似 Now 必须拥有全部 GitHub 仓库权限才能干活?
        22
    azh7138m   235 天前 via Android
    @quietjosen 我记得是 read only 来着,那私有仓库要怎么自动部署?

    github app 不是必须的,那个是集成 CI,可以本地使用 now cli。
        23
    v2dead   235 天前
    这个 github 的 webhook 接口我之前接了一下,openresty 的 lua 做的,前后 20 多行搞定,这还是因为 lua 库比较麻烦,验签不方便。
    这种东西都不需要上什么第三方吧?整的有点像之前 npm 那个 left-pad 一样。
    倒不是反对楼主开源这种项目,项目放出来倒是很好的,我只是觉得去用这类项目的咸鱼大概已经退化到忘记怎么写代码了。
        24
    quietjosen   235 天前
    @v2dead 术业有专攻,比如并不能要求 Vue 专家也是部署和运维专家。而且,如果需求深入的话,比如密码验证、邮件提醒、CI/CD,全部自己做,既不是 20 行代码能搞定,也不应该将本应用于开发的时间,分配到这方面。
        25
    v2dead   235 天前
    确实没什么问题,所以本身项目还是很好的,尤其文档还很详细。
    但是对于一个普通后端人员来说,随手处理一个验签,执行一个外部脚本,再发送一封通知邮件的接口应该比去找一个这种项目并学习怎么配置部署花的时间少的多了。。。。
        26
    ddiu8081   235 天前 via Android
    支持🌝
    以前也打算写个来着...然后后来换了 caddy server 就用不着了..
        27
    Les1ie   235 天前
    那我也分享一下现在正在用比较简易的 caddy 自动部署解决方案,可能没有 ci 之类的功能丰富,不过小项目,怎么快怎么来..(感觉非常方便,想给 caddy 10 个 star )
    1. 安装带 git 插件的 caddy: `curl getcaddy.com -sL |bash -s personal http.git`
    2. 配置 caddyfile,放到项目的父目录(如果有多个项目,只需要开这一个 caddy 即可)
    ```
    $ cat Caddyfile
    http://0.0.0.0:9009 {
    tls off
    log stdout

    # web 页面
    git {
    repo [email protected]:example/example.git
    path example
    hook /example
    key /root/.ssh/id_rsa
    hook_type generic
    branch master
    then docker exec container_name npm run build # 重新 build 源码
    then ./do-something-else.sh
    }
    git {
    repo [email protected]:example/example2.git
    path example2
    hook /example2
    key /root/.ssh/id_rsa
    hook_type generic
    branch master
    then docker exec container_name2 other command
    }
    }
    ```
    3. 到项目的父目录去运行去`caddy`
    4. github/gitlab 指定 webhook 地址 `example.com:9009/example``example.com:9009/example2`, 多个仓库以此类推
    5. 招开发,更多人选择 DevOps,一份工资,几个人的工作量
        28
    haozes   233 天前
    楼主写的,的确和 webhook handler 那个库差不多。 我就是用这个搭的
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   4268 人在线   最高记录 5043   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 24ms · UTC 03:15 · PVG 11:15 · LAX 19:15 · JFK 22:15
    ♥ Do have faith in what you're doing.