小忆

有梦想,有精彩

尝试Coding的Webhook

2017-05-26

Coding或者GitHub上都有Webhook这个功能,以前不知道这个有什么用,今天看到一篇关于Webhook的文章,一时兴起就尝试Coding上的Webhook(主要原因是GitHub上的关于Webhook的文档看不太懂)。

什么是Webhook?

Webhook 允许第三方应用监听 Coding.net 上的特定事件,在这些事件发生时通过 HTTP POST 方式通知( 超时5秒) 到第三方应用指定的 Web URL。WebHook 可方便用户实现自动部署,自动测试,自动打包,监控项目变化等。

写了几遍,感觉自己解释不清楚,所以直接复制Coding官方文档中的一段话。

Coding的Webhook事件

1
2
3
4
5
6
7
8
Ping 
Push
Member
Task
Topic
Document
Star
MR/PR

Webhook中的每个POST请求都包含特殊的Header

Header 说明
X-Coding-Event 事件名(具体每个事件对应的 event 就是上面事件列表的事件名字)
User-Agent Coding.net Hook

附上自己的测试代码吧

等我研究透彻了,在写一篇详细的文章给大家。

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
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);
})