最初我是使用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脚本的执行,本质上都是一样的

这样只是实现最简单的自动化部署,还有更高级的:

  1. GitLab-Runner 以及编写 .gitlab-ci.yml 文件
  2. GitLab Webhooks + Jenkins

还在研究中……

3 个评论

  1. 通告:Linux下 WebHook + Jenkins Pipline + Docker 实现web自动化容器部署 - 本人的窝

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注