git webhooks实现自动部署

前言

项目改动频繁,每次都需要手动提交到服务器,过程过于繁琐,所以决定使用自动化部署来简化项目部署过程。

使用技术

git  项目托管工具,支持webhooks(在git接收到操作时可以向指定url发送一个带参数的请求)

nodejs 接收url请求,执行脚本。可用php,python等语言代替

nginx web服务器,实现项目的访问,可用apache等web服务代替


git webhooks配置

在项目的webhooks中配置触发条件以及触发的url

pathName用于区分是哪个项目触发的事件,如果只需要自动部署一个项目可以省略


git webhooks实现自动部署_第1张图片


NodeJs

需要在服务器安装好node运行环境以及Node守护程序forever(node守护神,如果遇到问题程序崩溃立即重启),创建一个service.js将下列代码copy进去(具体配置需要自行修改),启动程序forever start server.js,程序运行成功后点击对应的webhooks后的test,如果返回200代表成功。

const http = require("http");

const url = require("url");

const exec = require("child_process").exec;

const hostName = '127.0.0.1';//ip地址,需要和webhooks填写的ip一致,可以是一个域名

const port = 8888;//端口号

const server = http.createServer((request, response) => {

var req = url.parse(request.url, true);

var pathName = req.pathname.slice(1);

if(!pathName) {//路径不存在

response.writeHead(404);

response.end("请输入正确的路径!");

}

var task = "";

//根据不同的路径执行不同的命令,针对多个项目的自动部署

if(pathName == "pathName") {

task = "cd project && git pull";//可指定分支,需要预先在服务器clone一份代码

} else {

response.writeHead(404);

response.end("错误的任务路径!");

}

//执行命令

exec(task, (err, stdout, stderr) => {

if(err) console.error(err);

response.writeHead(404);

response.end("执行失败");

});

response.writeHead(200, {'Content-Type': 'text/plain'});

response.end("执行成功\n");

});

server.listen(port, hostName, () => {

console.log(`Server running at http://${hostName}:${port}/`);

});



nginx实现web部署

server {

listen  80;

server_name    www.baidu.com;//监听的域名

location /

{

root /projectPath;//指定项目路径

index /index.html;//欢迎页

}

error_page  500 502 503 504  /50x.html;

location = /50x.html {

root  html;

}

}

你可能感兴趣的:(git webhooks实现自动部署)