nodejs项目热更新 github webhooks

当本地有代码通过git上传后,服务器收到github代码变更的通知,然后调用脚本拉取(git pull)最新的代码,最后重启程序(如:pm2 restart myproject)。所以只要通过git push完成后部署的程序就会自动热更新。

在github中对项目进行设置


  • 打开项目,如:nodeblog
  • 点击Settings->Webhooks->Add webhook

Palyload URL: http://123.57.244.171:3333/nodeblog
Content type: application/json
Secret: 自定义(如:123456)
选Just the push event就可以了
  • 点击Update webhook
  • 接收github变更通知

    nodejs服务代码

    var http = require('http')
    var createHandler = require('github-webhook-handler')
    var handler = createHandler({ path: '/nodeblog', secret: '123456' })
    
    function RunCmd(cmd, args, cb) {
      var spawn = require('child_process').spawn;
      var child = spawn(cmd, args);
      var result = '';
      child.stdout.on('data', function(data) {
        result += data.toString();
      });
      child.stdout.on('end', function() {
        cb(result)
      });
    }
    
    http.createServer(function (req, res) {
      handler(req, res, function (err) {
        res.statusCode = 404;
        res.end('no such location');
      })
    }).listen(3333)
    
    handler.on('error', function (err) {
      console.error('Error:', err.message);
    })
    
    handler.on('push', function (event) {
      console.log('Received a push event for %s to %s',
        event.payload.repository.name,
        event.payload.ref);
      var shpath = './' + event.payload.repository.name + '.sh';
      RunCmd('sh', [shpath], function(result) {
          console.log(result);
      })
    })
    
    handler.on('issues', function (event) {
      console.log('Received an issue event for %s action=%s: #%d %s',
        event.payload.repository.name,
        event.payload.action,
        event.payload.issue.number,
        event.payload.issue.title);
    })

    脚本代码

    PRO_DIR="/root/nodeblog"
    echo "start--------------------"
    cd $PRO_DIR
    echo "pull git code"
    git pull
    echo "restart nodeblog"
    pm2 restart nodeblog
    echo "finished-----------------"

    安装组件:npm install github-webhook-handler –save
    注意监听端口,项目名,path以及secret要与github Settings中的设置一致

    你可能感兴趣的:(node.js)