什么是webhooks?
-- 简单的来说是一种回调,和异步编程中的"订阅-发布模式"很类似,一端触发事件,一端监听执行,webhooks是异步编程模型的一种实现,具体的可以看webhooks
流程
git push xxx
本地代码提交至远程github仓库- github仓库收到push后进行回调,发post(
Payload url
是来自webhooks的配置)请求 - 基于
Payload url
的服务根据传回来的信息进行提取,拉取最新代码并重新构建项目
开始
-
搭建github-hook服务
-
目的是为webhooks提供payload url,并取得github 回调发来的信息,执行构建部署命令
-
选择:
a. copy我的github-hook,基于koa
b. 用这个自己写github-webhook-handler,基于node原生http服务的
c. 其他
-
介绍一下我的
github-hook
:目录:
. ├── README.md ├── config │ ├── data.example.js │ ├── data.js (配置项目的 dir/分支/启动命令) │ └── index.js (配置secret,与github的webhooks配置相同) ├── ecosystem.config.js (pm2启动配置文件) ├── package-lock.json ├── package.json └── src ├── controlers │ └── token.js (用于生成token,webhooks加密用) ├── index.js (启动文件) ├── jobs │ └── index.js (解析回调发来的信息,执行命令) └── routes └── index.js (路由,处理请求) 复制代码
-
-
在服务器启动
github-hook
服务- 登录服务器,进入工作目录(我的是
/var/nodejs
,可根据喜好自己改,别忘了改对应的config/data.js
文件的DIR
) git clone xxxgithub-hook.git
cd github-hook
npm i
npm run start
,用的是pm2,请先全局安装pm2curl ip:9002
,若有success字样,则成功- 注:本服务的端口是9002,若已占用,请自行更改
/index.js
,别忘记安全组开放端口
- 注:本服务的端口是9002,若已占用,请自行更改
- 登录服务器,进入工作目录(我的是
-
github配置webhooks
打开github,找到要配置的项目,进入setting-->webhooks-->新增一个:
* Payload URL: 输入上一步测试的api,即 `http://ip:9002/payload/{reponame}`,我这里的reponame即`github-hook` * Content type: 选择application/json * Secret: 与上面`/config/index.js`中的`appSecrcet`保持一致 * Which events would you like to trigger this webhook? 选择第一项 Just the push event. 即可 * 配置完成,提交即可 配置后如下图: 复制代码
-
测试
在本机更改
github-hook
代码,提交,然后打开刚刚的github页面看看下面是否有Recent Deliveries:
结束: 刚开始写东西,以前没有这个习惯,还请多多提意见,下次讲一讲webhooks的高级实例-->ci工具: 用jenkins打包构建部署项目.