Coding或者GitHub上都有Webhook这个功能,以前不知道这个有什么用,今天看到一篇关于Webhook的文章,一时兴起就尝试Coding上的Webhook(主要原因是GitHub上的关于Webhook的文档看不太懂)。
什么是Webhook?
Webhook 允许第三方应用监听 Coding.net 上的特定事件,在这些事件发生时通过 HTTP POST 方式通知( 超时5秒) 到第三方应用指定的 Web URL。WebHook 可方便用户实现自动部署,自动测试,自动打包,监控项目变化等。
写了几遍,感觉自己解释不清楚,所以直接复制Coding官方文档中的一段话。
Coding的Webhook事件
Ping
Push
Member
Task
Topic
Document
Star
MR/PR
Webhook中的每个POST请求都包含特殊的Header
Header | 说明 |
---|---|
X-Coding-Event | 事件名(具体每个事件对应的 event 就是上面事件列表的事件名字) |
User-Agent | Coding.net Hook |
附上测试代码吧
等我研究透彻了,在写一篇详细的文章给大家。
var express = require('express');
var bodyParser = require('body-parser');
var process = require('child_process');
var app = express();
app.use(bodyParser.json());
app.post('/webhook', function(req,res){
if('xxx' === req.body['token'] ){
console.log(req.headers['user-agent']);
//console.log(req.body.event);
process.exec('git pull origin master', {'cwd':'/root/whtest'},
function (error, stdout, stderr) {
console.log('stdout========================\n' + stdout);
console.log('stderr========================\n' + stderr);
if (error !== null) {
res.send('<pre>fail!!!\n' + stdout + error + '</pre>');
} else {
res.send('<pre>done!!!\n' + stdout + '</pre>');
}
});
} else {
console.log('failed token')
res.send('<pre>token不正确?</pre>');
}
});
app.set('port', 9000);
var server = app.listen(9000, function() {
console.log('Listening on port %d', server.address().port);
})
作者:小忆
未经作者允许严禁转载