本文主要介绍利用 github 提供的 Webhooks 实现自动化部署
配置 git SSH 公钥和私钥 可参考:git配置SSH ,配置成功之后,服务就能拉取 github 的代码了
配置 Webhooks 新建项目=>Settings=>Webhooks 配置项如下:
1 2 3 4 5 Payload URL // hook 触发的接口地址 Content type // request 类型(这里以 application/json 为例) Secret // 加密的秘钥 Which events would you like to trigger this webhook // 想要触发的时间,默认选择第一个(push 事件) Active // 是否提供详细信息
创建自动化部署 Shell 脚本(也可以是其他脚本或手段,这里以 Shell 为例) 1 2 3 4 5 #!/bin/bash cd /opt/...git pull ... 启动命令
编写调用自动化部署 Shell 的接口 这里以 node 服务 koa2 为例,也可以是其他语言服务
将创建 Webhooks 时填写的 Secret 存出在服务器环境变量中(这里以 contos7 为例)临时生效:
1 2 3 export SECRET_TOKEN=创建 Webhooks 时填写的 Secretecho $SECRET_TOKEN
永久生效:
1 2 3 4 5 6 7 8 9 10 11 12 vim /etc/profile 在最后,添加: SECRET_TOKEN=创建 Webhooks 时填写的 Secret export SECRET_TOKEN保存,退出 source /etc/profile echo $SECRET_TOKEN
创建 koa2 项目并编写调用自动化部署 Shell 的接口 创建 koa2 项目,对项目进行常规配置(此处省略 500 字,这里不属于本文重点介绍的内容,有兴趣请自行 Google)
关键代码性代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 const router = require ("koa-router" )();const childProcess = require ("child_process" ); const crypto = require ("crypto" ); router.post("/url" , function (ctx, next ) { const hubSignatureKV = ctx.header["x-hub-signature" ]; if (hubSignatureKV) { const hubSignature = hubSignatureKV.slice(5 ); const secret = process.env.SECRET_TOKEN; const hmac = crypto.createHmac("sha1" , secret); const up = hmac.update(JSON .stringify(ctx.request.body)); const signature = up.digest("hex" ); if (hubSignature === signature) { childProcess.exec("/opt/shell/hexo.sh" , function (err ) { console .log(err); }); ctx.body = "执行成功" ; } else { ctx.body = "服务器已积极拒绝你的请求" ; } } else { ctx.body = "服务器已积极拒绝你的请求" ; } }); module .exports = router;
部署接口服务并验证 将服务部署到服务器(这里案例为 node 服务,推荐使用 pm2 守护进程部署) 部署成功之后推送代码验证即可