Jenkins - 当GitHub推送更改时构建选项无法工作

41

Jenkins正在本地主机上运行。 我有我的存储库在GitHub上。我已经勾选了“当更改被推送到GitHub时构建”的选项。

当我点击“立即构建”时,构建成功完成,没有问题。但是,当我提交代码到我的存储库时,自动构建不会发生。我可以从我的系统访问GitHub,因为存储库是公共的,我相信Jenkins也应该能够检测到它。我知道有一个轮询选项,但我希望Jenkins在检测到存储库中的更改时进行构建(因为这就是我们一直试图实现的)。

配置:

Jenkins 1.615

Git Plugin 2.3.5

Git Client Plugin 1.17.1

————————————————————————————————————————————

编辑:“当更改被推送到GitHub时构建”选项已在最新版本的GitHub插件中更名为“GitHub挂钩触发器用于GITScm轮询”。 (感谢@smrubin的反馈。)


这个问题如何在Blue Ocean中解决? - technocrat
4个回答

77

我怀疑您错过了webhook url

除了检查选项Build when a change is pushed to GitHub之外,您还应该将webhook url添加到您的Github存储库中,以使自动触发机制工作,具体操作如下:

进入您的Github存储库:

设置 --> Webhooks & Services --> Service --> 添加服务 --> 选择“Jenkins(GitHub插件)”

然后在Jenkins hook url中填写您的Jenkins url,例如: http://your_jenkins_url/github-webhook/ enter image description here


非常重要!由于您正在本地主机上安装Jenkins服务器,请注意不应使用http://localhost:8080/github-webhook/这样的Jenkins hook url,因为Github无法识别localhost127.0.0.1192.168.*.*

您应该使用外部可访问的DNS名称或IP地址,以便被Github识别。


这个回答带来了希望的曙光 :) 我明白我需要去GitHub并提供Jenkins hook URL来添加服务。但是我不知道 <github-webhook> 是什么?我该如何获取/配置它? - Anuj Balan
@AnujBalan:你能想出如何去掉本地主机吗? - inquisitive
3
FYI,在最新版本的GitHub插件中,此选项已更名为“GitHub hook trigger for GITScm polling”https://wiki.jenkins-ci.org/display/JENKINS/Github+Plugin。 - smrubin
我可以通过在Github中添加Jenkins机器的SSH密钥来实现这个吗? - Harsha Biyani
显示剩余4条评论

45

我曾遇到相同的问题并解决了它。问题在于URL必须以/结尾。即:

http://<jenkinsurl>:8080/github-webhook/

http://<jenkinsurl>:8080/github-webhook

(注意末尾缺少/。)


3
哇,这也为我解决了问题...还以为我快疯了。 - David Calhoun
3
没问题,谢谢! - july
4
这应该在某个地方用红色记录下来。 - Konaras

3

实际上,如果您从Jenkins -> Github插件配置进行Webhook设置(如上所述),您仍将在Github中看到Webhook的创建。因此,以上两种方法基本上是在做相同的事情。

我个人喜欢从Github创建Webhook,因为这样您就不必在Jenkins中共享或存储Github用户信息。

步骤:

  1. 使用管理员身份登录Github

  2. 进入要与Jenkins关联的存储库

  3. 点击设置选项卡-> Webhooks & Services
  4. 点击添加Webhook。
  5. 输入负载URL:例如:http://:8080/github-webhook/
  6. 选择内容类型为json。
  7. 完成。

现在您进行更改并提交,您会发现Jenkins构建自动触发。不要忘记在Jenkins作业中进行设置,以便在推送代码到Github时启动构建。


1
GitHub插件(https://wiki.jenkins-ci.org/display/JENKINS/GitHub+Plugin)提到两种方式:手动模式和自动模式。mainframer给出了手动模式的答案。今天我发现了一些新东西。mainframer的服务添加不允许我添加多个Jenkins实例,因此我添加其他人添加Webhook如下所示。它也可以正常工作。
我想在这里放一张图片,但我的ID没有权利这样做。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接