webhook

最后更新于:2022-04-02 05:41:31

## 前言 如果你不想人肉的去操作命令行,可以设置下webhook,目前的github以及gitlab都支持这项设置。原理就是获取github的源码事件类型,然后基于服务器的服务通讯执行shell命令。 ## 教程 ### 准备一个github or gitlab的项目 * 将项目在linux服务器上通过git下载下来 * 设置webhook,需要设置的有: 请求的url,令牌(token), 触发的类型:push,delete等等,为了及时的更新,我设置的是commit提交便触发 应用类型:application/json类型 做相关的记录和提醒。 ### 准备一个可以外网访问的服务器(linux系统) 我们以node作为服务器,来实现shell脚本以及命令。参考源码如下:需要同步的项目和同步相关的命令可以自己执行,目前参考代码里仅有切换到项目目录,做更新的操作,如果需要的话,可以加上构建的过程,比如npm build,这样就可以做到实时构建发布。 ~~~ var http = require('http') , exec = require('exec') const PORT = 9001 , PATH = '/home/ucmed/wwwroot/webhookDemo' var deployServer = http.createServer(function(request, response) { if (request.url.search(/deploy\/?$/i) > 0) { var commands = [ 'cd ' + PATH, 'git pull' ].join(' && ') exec(commands, function(err, out, code) { if (err instanceof Error) { response.writeHead(500) response.end('Server Internal Error.') throw err } process.stderr.write(err) process.stdout.write(out) response.writeHead(200) response.end('Deploy Done.') }) } else { response.writeHead(404) response.end('Not Found.') } }) deployServer.listen(PORT) ~~~ 备注:使用secret,那么需要设置安装 `github-webhook-handler`,操作比较复杂,建议使用上面的方法即可。 * [参考使用github-webhook-handler链接](http://www.jianshu.com/p/e4cacd775e5b) ### 启动服务 * 简单调试启动,开发状态启动(窗口关闭之后,服务失效) `node server.js` * 热启动,一直进行 ~~~ // 设置后台执行,简单用法 nohup node server.js ~~~ * forever 模块,永久启动模块 ~~~ $ cnpm install -g forever //永久启动模块 会提示没有设置时间,不影响实际运行 $ forever start deploy.js $ forever list //关闭某个具体进程 $ forever stop 1 //关闭后的日志(其中14039 为进程的id) info: Forever stopped process: uid command script forever pid id logfile uptime [0] jxSu /home/soft/nvm/versions/node/v7.4.0/bin/node /home/ucmed/wwwroot/server/server.js 14033 14039 /home/ucmed/.forever/jxSu.log 0:0:5:1.993 $ forever restartall // 查看所有的日志 forever logs //查看日志实时打印 tail -f xxx.log ~~~ * [参考forever模块介绍](https://npm.taobao.org/package/forever)
';