git webhooks实现自动部署

前言

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

使用技术

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

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

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


git webhooks配置

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

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



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;

}

}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,997评论 19 139
  • 个人入门学习用笔记、不过多作为参考依据。如有错误欢迎斧正 目录 简书好像不支持锚点、复制搜索(反正也是写给我自己看...
    kirito_song阅读 2,505评论 1 37
  • 搭建静态资源服务器之node HTTP模块 1. 代码如下:const http = require('http...
    咚呱阅读 475评论 0 0
  • Node.js是目前非常火热的技术,但是它的诞生经历却很奇特。 众所周知,在Netscape设计出JavaScri...
    w_zhuan阅读 3,642评论 2 41
  • 本文参考了四弦同学的文章:在Linux服务器上搭建Hexo:OS X、Windows与Linux本地环境,讲解得非...
    野狗子嗷嗷嗷阅读 11,649评论 3 18