今天研究并实现一个响应 GitHub Webhooks 实现自动部署的 Web 服务。
简单收拾了下代码和文档(写文档比写代码累…),开源至此
这并不是一个 Hello Word 教学示例,而是我自己在用的实际项目。假设你已经知道下列技术或满足其条件:
node lib/index.js
运行后,在 3030
端口提供可响应 GitHub Webhook 的服务exec
来调用实际工作的 shell 脚本(需要自己编写)更多的,看 README 吧。
确实有重复造轮子的问题,也有维护的成本。如果有可能,还是建议大家用成熟的技术、第三方服务。
一些选择及建议:
其实,如果跳出来,直接上 Serverless,很多 CI/CD 的部分,压根就不存在了。
1
strugglexiang 2019-03-22 21:30:45 +08:00 via Android
蛤
|
2
heybuddy 2019-03-22 21:44:54 +08:00 via Android
支持一下
|
3
ericgui 2019-03-23 00:18:54 +08:00
|
6
mritd 2019-03-23 01:32:49 +08:00
你这个有点太硬核了吧...为啥不用 travis ci ?
|
7
zzjas98 2019-03-23 02:03:32 +08:00 1
支持,但是感觉重复造轮子了。之前写作业用过这个东西 https://github.com/adnanh/webhook,感觉和 lz 写的差不多
|
8
xlui 2019-03-23 08:26:14 +08:00 via iPhone
感觉像是超级简化版无图形界面版的 Jenkins
|
9
AngryPanda 2019-03-23 08:42:15 +08:00 via Android
webhooks 还是不够稳定
|
10
quietjosen OP |
11
quietjosen OP @zzjas98 哈哈,原来还可以做成付费服务啊:
|
12
quietjosen OP @xlui 如果可能,还是建议用成熟的第三方服务。我这个东西,就折腾了好几个小时。不过也看吧,至少折腾过程中学到了东西。
|
13
life1st 2019-03-23 09:44:47 +08:00 via Android
Nowsh 基本没见人提过
|
14
Cbdy 2019-03-23 09:59:02 +08:00 via Android
|
15
quietjosen OP @Cbdy 嗯,本质上,就是提交后运行一个命令或脚本。真说的话,你这个不支持密码检验和配置仓库及分支。
|
16
quietjosen OP @life1st 看着不错,瞧瞧去
|
17
ifwangs 2019-03-23 10:24:52 +08:00 via Android
caddy 好像就有 github 自动部署插件
|
18
quietjosen OP @ifwangs 替换已有 Web 容器,侵入性太强,不适用已经成型的产品。
|
20
thet 2019-03-23 11:54:34 +08:00 via Android
用的 jenkins
|
21
quietjosen OP |
22
azh7138m 2019-03-23 12:18:51 +08:00 via Android
|
23
v2dead 2019-03-23 14:37:11 +08:00
这个 github 的 webhook 接口我之前接了一下,openresty 的 lua 做的,前后 20 多行搞定,这还是因为 lua 库比较麻烦,验签不方便。
这种东西都不需要上什么第三方吧?整的有点像之前 npm 那个 left-pad 一样。 倒不是反对楼主开源这种项目,项目放出来倒是很好的,我只是觉得去用这类项目的咸鱼大概已经退化到忘记怎么写代码了。 |
24
quietjosen OP @v2dead 术业有专攻,比如并不能要求 Vue 专家也是部署和运维专家。而且,如果需求深入的话,比如密码验证、邮件提醒、CI/CD,全部自己做,既不是 20 行代码能搞定,也不应该将本应用于开发的时间,分配到这方面。
|
25
v2dead 2019-03-23 14:51:41 +08:00
确实没什么问题,所以本身项目还是很好的,尤其文档还很详细。
但是对于一个普通后端人员来说,随手处理一个验签,执行一个外部脚本,再发送一封通知邮件的接口应该比去找一个这种项目并学习怎么配置部署花的时间少的多了。。。。 |
26
ddiu8081 2019-03-23 15:17:53 +08:00 via Android
支持🌝
以前也打算写个来着...然后后来换了 caddy server 就用不着了.. |
27
Les1ie 2019-03-23 15:43:37 +08:00
那我也分享一下现在正在用比较简易的 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 2019-03-25 17:38:20 +08:00
楼主写的,的确和 webhook handler 那个库差不多。 我就是用这个搭的
|