使用gitee的webhook自动部署node项目

1. 在项目中新建一个webhook

1.png

url地址为: https://vue3-hooks.liuxsh.top/webhook
webhook密钥为: myhashsecret
复制代码

2. 创建webhook.js

// webhook.js
var http = require("http");
var spawn = require("child_process").spawn;
var createHandler = require("gitee-webhook-handler");
// 这里的/webhook对应上面url中的/webhook secret为上面配置的
var handler = createHandler({ 
    path: "/webhook", 
    secret: "myhashsecret" 
});

function RunCmd(cmd, args, cb) {
  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(7777);

# error事件
handler.on("error", function (err) {
  console.error("Error:", err.message);
});
# 我们监听的是Push
handler.on("Push Hook", function (event) {
  console.log(
    "Received a push event for %s to %s",
    event.payload.repository.name,
    event.payload.ref
  );
  var path = "./deploy.sh";
  // 新开一个进程运行deploy.sh文件
  RunCmd("sh", [path], function (result) {
    console.log(result);
  });
});
# 新建issue的hook
handler.on("Issue Hook", 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
  );
});

复制代码

3.编写要执行的sh脚本

#! /bin/bash
cd ~/vue3-admin-server
git reset --hard origin/master
git clean -f
git pull
git checkout master
npm install
npm run build
cd ./dist
pm2 restart vue3-api
复制代码

4. 使用pm2启动webhook.js

pm2 start ./webhook.js --name webhook
复制代码

5. 测试

访问页面 vue3-api.liuxsh.top/api/user/he…

WX20210531-202824@2x.png

修改代码 执行 git push 命令 再次访问页面

WX20210531-203026@2x.png

查看gitee中webhook的记录

WX20210531-203112@2x.png

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享