在平常个人开发的过程中是不是有这样的烦恼:
项目开发完结,Push之后
登录服务器,手动git pull,然后运转布置命令
这真的很烦诶!
那么能不能Git push之后,远端服务器主动 Git pull 然后运转布置命令呢?
答案当然是能够的!
这就要请出我们的秘密武器啦!
剖析
先剖析一波,主动化布置需要完成以下功用:
- 监听代码库房的变动。
- 当检测到代码更新时,主动拉取最新代码。
- 运转必要的构建和测验脚本。
- 将构建产物布置到服务器。
而完成这全部的前提,便是GitHub 供给的WebHook。
img
WebkHook供给了一种告诉web服务器有关库房变更有关的事情,你能够简略理解为:
git库房发生了改变,包含但不限于push、pull、fork等等
git官方服务器会发送一个恳求到你设置webHook链接
你依据这个恳求对应的事情进行操作。**
着手
第一步:装备Webhooks
直接上手吧,在repo-setting设置webHook,例如:http://your-server-ip:3000/webhook
img
在你的Git库房(如GitHub)中,找到Webhooks设置,增加一个新的Webhook。Payload URL设置为你服务器上的一个URL,例如http://your-server-ip:3000/webhook
。
第二步:创立监听服务
(你也能够使用python、php、golang,anyway)
在服务器上创立一个Node.js应用来监听Webhook的POST恳求。创立一个webhook-listener.js
文件,并写入以下内容:
const express = require('express');
const bodyParser = require('body-parser');
const cmd = require('node-cmd');
const app = express();
const port = 3000; // Webhook监听端口
app.use(bodyParser.json());
app.post('/webhook', (req, res) => {
// 这里需要验证Webhook的secret,这个示例中省略了验证步骤
if (req.headers['x-github-event'] === 'push') {
cmd.get('git pull', (err, data) => {
if (err) {
console.error(err);
res.status(500).send('Server Error');
return;
}
cmd.get('yarn install', (err, data) => {
if (err) {
console.error(err);
res.status(500).send('Server Error');
return;
}
cmd.get('yarn run build', (err, data) => {
if (err) {
console.error(err);
res.status(500).send('Server Error');
return;
}
cmd.run('serve -s build -l 3003');
console.log('Deployment completed');
res.status(200).send('OK');
});
});
});
} else {
res.status(200).send('Received');
}
});
app.listen(port, () => {
console.log(`Webhook listener running on port ${port}`);
});
运转该脚本:
node webhook-listener.js
这将启动一个监听3000端口的服务,等待GitHub的Webhook告诉。
(端口你能够自行指定)
第五步:测验Webhook
推送代码到你的Git库房,以测验Webhook是否正确触发了主动布置脚本。
假如全部设置正确,你应该能够在服务器上看到主动拉取代码并履行构建和布置的过程。
完结
你,学废了吗?
本文使用 mdnice 排版