Github Webhook与NextJs

时间:2019-11-27 06:13:44

标签: express github next.js

我正在研究NextJS项目,我想使用github webhook来部署具有部署说明的脚本。

我已经在github中设置了一个推送Webhook

我试图在server.ts文件中添加以下代码,现在使用ngrok进行测试

// testing
server.post("/webhooks/github", function(req, res) {
  var sender = req.body.sender;
  var branch = req.body.ref;

  if (branch.indexOf("master") > -1 && sender.login === githubUsername) {
    deploy(res);
  }
});

function deploy(res: any) {
  childProcess.exec("sh deploy.sh", function(err, stdout, stderr) {
    if (err) {
      console.error(err, stderr);
      return res.send(500);
    }
    console.log(stdout);
    res.send(200);
  });
}

此文件是我的nextJS应用程序的节点文件

但是我的ngrok日志中却显示502

我想知道应该在我的NextJS应用程序中的哪个位置放置此webhook端点才能使其正常工作

2 个答案:

答案 0 :(得分:1)

我要使其正常工作的唯一方法是在同一服务器上创建另一个应用程序(我使用express),然后在该端点上将其用作github webhook,然后从那里运行deploy脚本。

简单的解决方案,希望对您有所帮助。

答案 1 :(得分:0)

我知道这已经晚了,但这对我有用:

// pages/api/webhooks/github.js
const { exec } = require("child_process");
const crypto = require("crypto");

// Handle GitHub Webhooks
export default function handler(req, res) {
    try {
        console.log("Incoming Request");
        if (req.method !== 'POST') {
            res.send(404);
            return;
        }
        let sig =
            "sha256=" +
            crypto
                .createHmac("sha256", process.env.WEBHOOKS_SECRET)
                .update(JSON.stringify(req.body))
                .digest("hex");
        if (
            req.headers["x-hub-signature-256"] === sig &&
            req.body?.ref === "refs/heads/main" &&
            process.env.REPO_PATH
        ) {
            exec(
                "cd " +
                    process.env.REPO_PATH +
                    " && git pull && npm install && npm run build && pm2 restart app"
            );
            console.log("GitHub Webhook ran successfully");
            res.end();
            return;
        }
        console.log("GitHub Webhook failed");
        res.end();
        return;
    } catch (e) {
        console.log(e);
    }
};