最初我是使用ftp上传最新项目进行部署,后来是登陆服务器使用git pull来下拉代码,都不是很方便,后来发现可以利用git带的webhook来实现代码上传自动部署
- 原理
每次使用git 命令后可以触发webhook钩子,向指定的服务器发送一个post请求,服务器接收到该请求,执行shell命令实现自动下拉代码
- step1 配置webhook
在git管理中设置webhook
此处可以选择触发的条件,选择push
- step2 配置git
在服务器装好git,并配置好email和name,或使用ssh连接git仓库
- step3 创建node.js服务
创建一个node.js服务
/****
* 用于配合webhook实现自动部署的服务
*
* 版本 1.0
*/
var http = require('http')
, exec = require('exec');
const PORT = 90;
var deployServer = http.createServer(function (request, response) {
if (request.url.search(/deploy\/?$/i) > 0) {
var commands = [
'git pull origin master'
].join(' && ');
if (request.headers["x-gitee-token"] === '1998') {
exec(commands, function (err, out, code) {
if (err instanceof Error) {
response.writeHead(500);
response.end('Server Internal Error.');
throw err;
}
process.stderr.write(err);
process.stdout.write(out);
response.writeHead(200);
response.end('Deploy Done.');
});
}
} else {
response.writeHead(404);
response.end('Not Found.');
}
});
deployServer.listen(PORT, '0.0.0.0');
在header中能拿到在webhook设置的密码字段,用于验证该请求是从git仓库发送过来的,更保险还可以验证ip
用到exec模块,执行命令
- step4 启动node
由于使用node的方式启动容易挂掉,可以使用pm2 或forever来管理node服务,推荐前者
npm install -g pm2
然后执行
pm2 start index.js --name git
更多pm2指令参考:https://blog.csdn.net/chengxuyuanyonghu/article/details/74910875
- step5 测试生效
在git里面可以测试node服务是否正确
正确的话http状态码返的是200,同时服务端也下拉了最新的代码
- 总结
也可以通过nginx、php等来实现shell脚本的执行,本质上都是一样的
这样只是实现最简单的自动化部署,还有更高级的:
- GitLab-Runner 以及编写 .gitlab-ci.yml 文件
- GitLab Webhooks + Jenkins
还在研究中……
通告:Linux下 WebHook + Jenkins Pipline + Docker 实现web自动化容器部署 - 本人的窝
Одновременно с этим существует и другая сторона формирования и организации высказывания.
Одновременно с этим существует и другая сторона формирования и организации высказывания.