git push之后服务器如何自动更新?

Posted 残梦

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了git push之后服务器如何自动更新?相关的知识,希望对你有一定的参考价值。

在我们开发的过程中,我的开发流程一般都是
说明 本地 -> git push -> 服务器 -> git pull -> npm i -> yarn build
那么我们能不能去监听 git push 呢?
如果我们每次push之后,服务器可以自动的去执行上面的后面的命令岂不是很好

第一种方式

使用 travis-ci.org -> 官网
他的作用就是我们每次push之后,可以帮我们运行一遍,保证代码成功 build status
但是如果travis需要操作服务器的话,那么这个过程就非常麻烦了,需要生成ssh,等等很多,这里面不过多介绍这种

第二种(推荐)

  1. 创建一个仓库技术图片
  2. 进入设置 技术图片
  3. 创建webhooks技术图片
  4. 在服务器上创建webhooks.js 写代码
var http = require('http')
var createHandler = require('github-webhook-handler')
var handler = createHandler({ path: '/demo', secret: '123' })
// 上面的 secret 保持和 GitHub 后台设置的一致

function run_cmd(cmd, args, callback) {
    var spawn = require('child_process').spawn;
    var child = spawn(cmd, args);
    var resp = "";

    child.stdout.on('data', function (buffer) { resp += buffer.toString(); });
    child.stdout.on('end', function () { callback(resp) });
}

http.createServer(function (req, res) {

    handler(req, res, function (err) {
        res.statusCode = 404
        res.end('no such location')
    })
}).listen(6000,() =>{
    console.log('WebHooks Listern at 6000');
})
handler.on('push', function (event) {
  console.log('Received a push event for %s to %s',
    event.payload.repository.name,
    event.payload.ref);
    // 分支判断
  if(event.payload.ref === 'refs/heads/master'){
      console.log('deploy master..')
      run_cmd('sh', ['./deploy.sh'], function(text){ console.log(text) });
  }
})

需要修改的地方

  1. 端口改为创建webooks的端口
  2. 第三行的path要和webhooks后面的路径匹配, secret 也要和创建时匹配
  3. 在下面./depoly.sh是最关键的,也就是每次push执行的命令
  4. 在服务器的这个文件的目录下创建 deploy.sh ,文件内容如下
cd /usr/local/nginx/html/meituan
git pull
npm i
yarn build
  1. 切记服务器要对外开放6000端口才行,并且这个webooks要一直开启,推荐使用pm2开启git push之后服务器如何自动更新?

以上是关于git push之后服务器如何自动更新?的主要内容,如果未能解决你的问题,请参考以下文章

git项目初次push提示error: failed to push some refs to https://gitee.com/xxxx/gittest.git’解决方案 --九五小庞(代码片段

git基础教程(42) 为何我clone的项目可以直接pull,push,而我自建项目却无法直接push

如何禁止GitLab分支被push

git commit/push后如何回退

git--git中的提交

git在push之后进行代码回滚