TIP
之前用的是jenkins搭建的,可是我的服务器内存太小,带着费力。
准备自己的项目目录(我这以vuepress博客为例)
bash
# 我的项目放在home下的projects下
cd /home/projects
# 克隆
# 项目中.gitignore不要添加dist文件夹
# 克隆自己的项目
git clone https://gitee.com/wstee/blog.git
# 没有全局配置git用户名密码的记得配置一下,不然每次pull都要登录,导致失败
# 直接将nginx配置指向 .vuepress/dist文件夹 访问看是否正常
安装必要包
bash
mkdir webhook
cd webhook
yarn init
yarn add git-webhook-handler
编写js
bash
vim index.js
js
// index.js
var http = require('http')
var createHandler = require('git-webhook-handler')
// secret 自行填写 随机字符串
var handler = createHandler({ path: '/webhook', secret: '12345678' })
function RunCmd(cmd, args, cb) {
var spawn = require('child_process').spawn;
var child = spawn(cmd, args);
var result = '';
child.stdout.on('data', function(data) {
result += data.toString();
});
child.stdout.on('end', function() {
cb(result)
});
}
// 端口8688 自行修改
http.createServer(function (req, res) {
handler(req, res, function (err) {
res.statusCode = 404;
res.end('no such location');
})
}).listen(8688);
handler.on('error', function (err) {
console.error('Error:', err.message);
})
handler.on('push', function (event) {
console.log('Received a push event for %s to %s',
event.payload.repository.name,
event.payload.ref,
event.payload.head_commit.message);
var message = event.payload.head_commit.message;
// 如果commit message中包含[ci-build](可自行修改)才构建项目,避免每次push都来都更新
if(/\[ci\-build\]/g.test(message)) {
// 执行shell文件
var shpath = './start.sh';
RunCmd('sh', [shpath], function(result) {
console.log(result);
})
} else {
console.log(/\[ci\-build\]/g.test(message));
}
})
创建shell脚本
bash
vim start.sh
根据自己的项目调整
shell
#!/bin/bash
# 进入项目目录
echo '进入项目根目录>>>>'
cd /home/projects/blog
# 拉取最新代码
echo '拉取最新代码>>>>'
git pull
echo '更新完成'
使用pm2启动webhook
bash
pm2 start /home/projects/webhook/index.js --name webhook
gitee添加webhook
怎么更新vuepress博客
在package.json中添加如下,然后写了文章后运行yarn blog
json
// pacakge.json
"script": {
"update:blog": "git add -A && git commit -m \"[ci-build] 更新博客\" && git pull && git push",
"blog": "yarn build && yarn update:blog"
}
注意
- .gitignore不能添加dist
- 可以先不用pm2启动,直接用node启动先测试下
- 只有commit message中包含
[ci-build]
才触发博客更新