git-webhook-handler fork from https://github.com/Rem486/git-webhook-handler
git submodule init
git submodule update
apt-get install node
npm install bl // 安装bl
修改secret和端口,看情况修改path,
var http = require('http')
var createHandler = require('./git-webhook-handler')
var handler = createHandler({ path: '/webhook', secret: 'xxx' }) # secret需要改
function run_cmd(cmd, args, callback) {
var spawn = require('child_process').spawn;
var child = spawn(cmd, args);
var resp = "";
child.stdout.on('data', function(buffer) { resp += buffer.toString(); });
child.stdout.on('end', function() { callback (resp) });
}
http.createServer(function (req, res) {
handler(req, res, function (err) {
res.statusCode = 404
res.end('no such location')
})
}).listen(9096) # 端口需要改
handler.on('error', function (err) {
console.error('Error:', err.message)
})
handler.on('push', function (event) {
console.log('receive webhook success')
console.log('Received a push event for %s to %s',
event.payload.repository.name,
event.payload.ref)
run_cmd('sh', ['./webhook.sh',event.payload.repository.name], function(text){ console.log(text) });
})
handler.on('issues', function (event) {
console.log('Received an issue event for %s action=%s: #%d %s',
event.payload.repository.name,
event.payload.action,
event.payload.issue.number,
event.payload.issue.title)
})
#!/bin/bash
cd /root/model-manage
git pull
并且给webhook.sh权限
chmod 755 webhook.sh
简单测试用,可以运行,记得确保9096端口是外部可以访问的
node webhook.js
实际使用,使用screen里面运行
apt-get install screen //安装screen
screen -S webhook //创建一个服务
screen -r webhook //进入
node webhook.js //运行服务
control+a+d //退出,千万不要control+c退出
github仓库->setting->web hooks,点击add webhook,端口是默认9096,记得服务器开启9096端口,或者换其他可以通的端口,secret记得和webhook.js里面一样。
点击测试webhook
成功!