Express 带有NextJs的Github webhook
我正在从事一个NextJS项目,我想使用github webhook部署一个包含部署说明的脚本 我在github中设置了一个推送webhook 我试图在server.ts文件中添加以下代码,目前正在使用ngrok进行测试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.
// 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);
}
};