美文网首页Git
git webhooks实现自动部署

git webhooks实现自动部署

作者: 杭州七木科技 | 来源:发表于2017-05-20 09:24 被阅读0次

    前言

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

    使用技术

    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;

    }

    }

    相关文章

      网友评论

        本文标题:git webhooks实现自动部署

        本文链接:https://www.haomeiwen.com/subject/lqehxxtx.html