NodeJS 集成码云和Hexo

Hexo大多数都是部署在GitHub上,但我因为双十一买了个云服务器所以打算部署在国内的阿里云上,最开始折腾的几天,都是本地提交到码云,然后ssh登录服务器更新&生成内容。

最近这几天更新的频繁了一点,这种重复性的操作就显得有点2了。

下面是利用 Web Hook 实现的自动 pull 然后生成内容的实现。

设计思路

  • 码云支持Web Hook,每次push和其它一些操作可以触发。
  • 用NodeJS编写个应用来处理Web Hook推送过来的指令(具体的操作写在了shell里,NodeJS只负责调用)。
  • PM2 部署NodeJS应用

具体脚本

web-hook-gitee.js

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
35
36
37
38
39
40
var http = require('http');
var process = require('child_process');

var password = '码云的WebHoooks中设置的密码';

http.createServer(function (req, res) {

var body = '';

req.on( 'data' , function ( chunk ) { body += chunk; });

req.on('end', function () {
// 解析参数

var j = JSON.parse(body);

var repo_name = j.repository.name;
var user_name = j.user_name;
var total_commits = j.total_commits_count;
var pass = j.password;

//console.log(repo_name);
//console.log(user_name);

if (password === pass) {
console.log('password right');

process.exec('sh /home/school1024/web-hook-shell.sh', function (error, stdout, stderr) {
if (error !== null) {
console.log('exec error: ' + error);
}
});
}

res.end();

});
}).listen(3000);

console.log('Server running at http://127.0.0.1:3000/');

web-hook-shell.sh

1
2
3
4
5
#!/bin/bash

git pull && hexo clean && hexo g

echo 'successful.'
分享到