Windows 上未触发 GitHub 后接收挂钩

时间:2021-02-06 09:28:01

标签: bash git jenkins github githooks

我正在尝试使用 post-receive git-hook 通过触发我设置的 Jenkins 管道来自动部署一个简单的 maven 项目。源代码托管在 GitHub 存储库上,而 Jenkins 托管在我 PC 上运行的容器上。到目前为止,我推送到主分支后没有触发钩子。

问题是,如果我尝试手动运行脚本,它就可以正常工作!我还尝试将 chmod +x 与 Git Bash(毕竟我在 Windows 上)设置为 post-receive 文件,不幸的是没有成功:钩子仍然没有被触发。可能是什么问题?

我已经尝试在 stackoverflow 上寻找类似主题的答案,但没有解决我的问题。仅供参考,在接收后脚本下方(如您所见,没什么特别的):

#!/bin/bash
   
JENKINS_URL="http://localhost:8080"
JOB="deploy-to-slave-pipeline"
JENKINS_CREDENTIALS="theuser:11d422ee679503eeb328c5b1998327cc7f"

echo "Triggering Jenkins job..."
crumb=$(curl -u "$JENKINS_CREDENTIALS" -s '$JENKINS_URL/crumbIssuer/api/xml?xpath=concat(//crumbRequestField,":",//crumb)')
curl -u $JENKINS_CREDENTIALS -H "$crumb" -X POST "$JENKINS_URL/job/$JOB/build?delay=0sec"

编辑

正如@bk2204 所指出的,post-receive 是一个服务器端钩子。我需要的是一个 webhook,它可以在你的 GitHub 存储库的 Settings/Webhook 页面中设置。只需将其配置如下,其中 Payload URL 是您的 Jenkins URL,后跟 /github-webhook/

enter image description here

然后您要做的就是设置您的 Jenkins 作业以由 GitHub 触发,方法是检查构建触发器部分的相关选项,如下所示:

enter image description here

然后你就可以走了!此外,如果您在本地运行 Jenkins 实例,则可以使用 ngrok 公开它并测试您的 CI/CD 管道!

[参考。 https://dzone.com/articles/adding-a-github-webhook-in-your-jenkins-pipeline]

1 个答案:

答案 0 :(得分:0)

post-receive 钩子运行在服务器端,而不是客户端。这意味着它在 GitHub 上运行,假设您要推送到 GitHub,而不是在您的本地机器上运行。

通常,您需要一个 GitHub webhook 来通知您推送事件,但您不能在这里使用它,因为机器在本地主机上运行,​​并且此类事件必须能够在公共 IP 地址上执行,因为 GitHub 具有向它发送 HTTP 请求。