Express 带有NextJs的Github webhook

Express 带有NextJs的Github webhook,express,github,next.js,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.

我正在从事一个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端点放在哪里才能让它工作

我能让它工作的唯一方法是在同一台服务器上创建另一个应用程序(我使用了express),然后在该服务器上使用一个端点作为github webhook,并从那里运行部署脚本


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

我知道这已经很晚了,但这对我来说很有效:

// 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);
    }
};