使用git@osc的WebHook自动部署

本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

转载自夜明的孤行灯

本文链接地址: https://www.huangyunkun.com/2015/09/22/git-osc-hook-auto-deploy/

有一个小项目代码托管在git@osc上,因为oschina支持免费的私有库,代码就放在上面了。

因为毕竟是实验性的东西,部署比较频繁,就写了一小段shell去做部署,也就是每次需要部署的时候登陆到主机执行这段shell即可。

后面看到了deploybot,感觉挺有意思的,但是最后的部署需要登录到主机上,总感觉不安全。

看了一下,利用WebHook也可以自己做到相关功能。

git@osc的WebHook是可以配置密码的,所以安全性还可以。

因为很简单的功能,监听一个端口,获取到post到的数据,然后判断密码,在判断commit信息,如果包含[deploy]就调用部署脚本。

图方便直接使用nodejs来写,虽然对nodejs很不熟,但是毕竟快。用到的库是express,日志用的log4js

var express=require('express');
var app= express();
var bodyParser=require('body-parser');
var spawn=require('child_process').spawn;
var log4js=require('log4js');
log4js.configure({
appenders:[
{type:'console' },
{type:'file', filename:'logs.log' }
]
});
var logger = log4js.getLogger();
app.use(bodyParser.urlencoded({ extended:false }));
app.post('/',function(req, res){
var hook =JSON.parse(req.body.hook);
if(hook){
logger.debug('Get password as ' + hook.password);
if(hook.password=='你的密码'){
if(hook.push_data.commits[0].message.indexOf('[deploy]')>-1){
logger.info('Should deploy');
var deploy = spawn('部署脚本');
deploy.stdout.on('data',function(data){
logger.info('Standard output:n%s', data);
});
deploy.stderr.on('data',function(data){
logger.error('Standard error:n%s', data);
});
deploy.on('exit',function(code, signal){
logger.info('Finish with code %s', code);
});
}else{
logger.info('Git message is %s', hook.push_data.commits[0].message);
}
}else {
logger.error('Password is incorrect!');
}
}
res.send('End');
});
var server = app.listen(9000,function(){
var host = server.address().address;
var port = server.address().port;
logger.info('Git hook listening at http://%s:%s', host, port);
});

执行效果如下:

[2015-09-2220:00:31.318] [INFO] [default] - Git hook listening at http://:::900
[2015-09-2220:05:30.991] [DEBUG] [default] - Get password as 密码
[2015-09-2220:05:30.993] [INFO] [default] - Should deploy
...
[2015-09-2220:07:14.214] [INFO] [default] - Finish with code0

本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

转载自夜明的孤行灯

本文链接地址: https://www.huangyunkun.com/2015/09/22/git-osc-hook-auto-deploy/

发表评论