全站年SVIP
全站1000+试题无限查看
在我们做本地和服务器代码同步的过程中,实现本地push,服务器自动监听更新,并重启应用服务。这个过程需要git+webhook+Node.js来实现。本篇说明仅针对Node.js的监听实现。
在Github、Gitlab、Gitee等线上仓库配置Webhook
服务器上需要安装NodeJS环境,安装方法请自己去官网查阅。
然后执行命令全局安装:
npm install http-server -g npm install git-webhook-handler -g
在项目目录下新建 webhook.js,这个js实现的是启动一个自进程服务,来监听端口,接收webhook发送过来的请求,并执行相应的.sh启动脚本来实现代码的自动更新。
var http = require('http') var createHandler = require('git-webhook-handler') var handler = createHandler({ path: '/webhook', secret: 'xxxxx' }) function RunCmd(cmd, args, cb) { var spawn = require('child_process').spawn; var child = spawn(cmd, args); var result = ''; child.stdout.on('data', function(data) { result += data.toString(); }); child.stdout.on('end', function() { cb(result) }); } http.createServer(function (req, res) { handler(req, res, function (err) { res.statusCode = 404; res.end('no such location'); }) }).listen(7777) handler.on('error', function (err) { console.error('Error:', err.message); }) handler.on('push', function (event) { console.log('Received a push event for %s to %s', event.payload.repository.name, event.payload.ref); var shpath = './project-start.sh'; RunCmd('sh', [shpath], function(result) { console.log(result); }) })
如何启动这个脚本呢?
我这里用的是pm2,全局安装pm2
npm i pm2 -g
到项目根目录下,执行启动命令
pm2 start webhook.js
project-start.sh脚本,仅供参考,更加自己实际情况调整:
#!/bin/bash ## 进入项目目录 echo '进入项目根目录>>>>' cd /root/app/my-project ## 拉取最新代码 echo '开始最新代码>>>>' git pull ## 执行项目的build echo 'build项目' yarn build ## 重新启动项目 pm2 start echo '项目重启完成!!'
需要把监听脚本的 7777 端口对外开放,让Git的Webhook请求到。
server { listen 80; ... location /webhook { proxy_pass http://localhost:7777/webhook; } }
重启nginx是的配置生效
nginx -s reload
以上设置完成后,就可以进行本地push的验证,代码仓库收到变动会调用webhook请求我们的服务器,服务器收到请求后,启动project-start.sh脚本,拉取代码,重启启动项目。
查看webhook调用结果:
查看服务器监听脚本日志:
根据 pm2 list 来查看进程 id, 然后通过 pm2 log xx 来查看脚本生成日志。
服务器自动化更新部署 Git + Webhook + Node.js
在我们做本地和服务器代码同步的过程中,实现本地push,服务器自动监听更新,并重启应用服务。这个过程需要git+webhook+Node.js来实现。本篇说明仅针对Node.js的监听实现。
1、配置Webhook
在Github、Gitlab、Gitee等线上仓库配置Webhook
2、服务器安装监听服务
服务器上需要安装NodeJS环境,安装方法请自己去官网查阅。
然后执行命令全局安装:
npm install http-server -g npm install git-webhook-handler -g
3、增加webhook监听脚本
在项目目录下新建 webhook.js,这个js实现的是启动一个自进程服务,来监听端口,接收webhook发送过来的请求,并执行相应的.sh启动脚本来实现代码的自动更新。
var http = require('http') var createHandler = require('git-webhook-handler') var handler = createHandler({ path: '/webhook', secret: 'xxxxx' }) function RunCmd(cmd, args, cb) { var spawn = require('child_process').spawn; var child = spawn(cmd, args); var result = ''; child.stdout.on('data', function(data) { result += data.toString(); }); child.stdout.on('end', function() { cb(result) }); } http.createServer(function (req, res) { handler(req, res, function (err) { res.statusCode = 404; res.end('no such location'); }) }).listen(7777) handler.on('error', function (err) { console.error('Error:', err.message); }) handler.on('push', function (event) { console.log('Received a push event for %s to %s', event.payload.repository.name, event.payload.ref); var shpath = './project-start.sh'; RunCmd('sh', [shpath], function(result) { console.log(result); }) })
如何启动这个脚本呢?
我这里用的是pm2,全局安装pm2
npm i pm2 -g
到项目根目录下,执行启动命令
pm2 start webhook.js
4、代码同步更新启动脚本
project-start.sh脚本,仅供参考,更加自己实际情况调整:
#!/bin/bash ## 进入项目目录 echo '进入项目根目录>>>>' cd /root/app/my-project ## 拉取最新代码 echo '开始最新代码>>>>' git pull ## 执行项目的build echo 'build项目' yarn build ## 重新启动项目 pm2 start echo '项目重启完成!!'
5、配置nginx
需要把监听脚本的 7777 端口对外开放,让Git的Webhook请求到。
重启nginx是的配置生效
nginx -s reload
6、验证配置结果
以上设置完成后,就可以进行本地push的验证,代码仓库收到变动会调用webhook请求我们的服务器,服务器收到请求后,启动project-start.sh脚本,拉取代码,重启启动项目。
查看webhook调用结果:
查看服务器监听脚本日志:
根据 pm2 list 来查看进程 id, 然后通过 pm2 log xx 来查看脚本生成日志。