Jenkins轮询SCM问题

6
我正在尝试使用Jenkins完成一项非常简单的任务。当检测到我的存储库发生更改时,激活一个流水线。我只有两个设置(如下所示)。
然而,任何对存储库的更改并等待必需的轮询时间都不会触发该流水线?
我在这里做了什么蠢事吗?

enter image description here


编辑:

  • 这是在docker容器中。容器的时间是UTC,主机是基于BST的。我通过-e JAVA_OPTS=-Duser.timezone=Europe/London在容器运行时更新了TZ。
  • 在容器上运行tcpdump,我看不到任何出站到github的流量(https)。
  • 下面添加了轮询日志。

enter image description here


在给定的时间间隔内运行作业 - Perplexabot
1
我的理解是你可以使用轮询或钩子?在线示例表明,你可以单独使用轮询。 - felix001
是的,您可以使用 true。但是当更改时,轮询不会运行作业。 - Perplexabot
你的链接告诉你工作何时被触发,“每分钟一次”。这类似于cron风格的调度:) - Perplexabot
我认为GitHub项目标志是为了让你可以通过在作业页面左侧点击GitHub图标快速访问github存储库页面;)至少没有选中GitHub hook trigger for GITScm polling标志。您需要该标志来触发更改。但这还不够。您需要设置一个github挂钩。我知道有两种方法可以做到这一点O_o - Perplexabot
显示剩余11条评论
5个回答

5
考虑使用基本的 Git 功能,而不是 GutHub 项目 功能。我总是更喜欢使用通用功能,而不是特定于某个服务提供商(GitHub、Bitbucket 等)的功能。请参见下面的图片。

enter image description here


等等,这个是在提交/推送时触发作业还是定期触发?在我看来,这是定期触发的。或者我有什么遗漏吗? - Perplexabot
@Perplexabot 这个操作会轮询软件配置管理(SCM)以检查是否有更改,如果有的话就触发构建。 - hakamairi
@hakamairi,有趣的是我之前并不认为可以通过“Poll SCM”实现。使用这种方法唯一的区别在于它不会在提交/更改时触发作业,而是等待一段时间后检查是否自上次轮询以来发生了更改(可能是单个提交/更改,也可能是来自不同开发人员的多个更改/推送),如果是,则启动作业。相比使用github web hook,后者会在更改发生时立即触发作业。但这仍然不能触发更改。真是个奇怪的答案。 - Perplexabot
1
@Perplexabot,你那里的轮询定义是正确的。 - hakamairi

0

你在 Jenkins 中的配置看起来很好。你尝试手动运行第一次构建来检查 Jenkins 和 Git 配置是否正常工作了吗?如果第一次手动触发构建成功,那么请在仓库中进行另一个测试更改,以查看 Jenkins 是否正在轮询 SCM。

此外,你可能想考虑使用 Git WebHook 触发器,当仓库中检测到更改时触发 Jenkins 构建,而不是 Jenkins 轮询 SCM。


可以的,手动操作没问题。似乎当我创建流水线时,Jenkins会看到仓库上的第一个更改,之后就没有变化了。 - felix001
@bilcy,他的配置不太好。他正在轮询而不是触发。 - Perplexabot
@perplexabot 的轮询应该仍然有效,即在存储库中发现机会时触发构建。 - felix001
这是正确的。但是在你的问题中,你问为什么工作没有在更改后运行。使用轮询不会发生这种情况。 - Perplexabot
1- 定期构建:无论是否在存储库中进行更改,都会定期构建作业。 2- 轮询SCM:轮询存储库以检测更改。如果检测到更改,则触发/启动/构建作业。 3- Webhook - Jenkins不轮询SCM。当存储库中出现更改时,SCM会向Jenkins发出HTTP调用以触发构建。 - bilcy
我正在尝试让你评论中的第二点起作用。 - felix001

0

@Jose Martinez的回答是正确的,以下是原因。

Github Jenkins插件提供以下功能:

  • 创建Jenkins项目和GitHub之间的超链接
  • 通过从post-receive钩子中解析HTTP POST并可选地自动管理钩子设置来在推送到存储库时触发作业。
  • 将构建状态结果作为提交状态报告回传给GitHub(在SO上有记录)
  • 其他插件的基本功能

Git Jenkins插件似乎负责SCM轮询。

通过提供Github项目URL,您并没有提供git插件所需的必要配置。如果您想使用SCM轮询功能,仍然需要在“源代码管理”部分中添加“存储库URL”

谢谢,但是在流水线中的源代码管理下没有添加仓库URL。 - felix001
@felix001 好的,它起作用了吗?如果不行的话,那就是一个 bug。然后最好找出哪个插件会负责这个问题。 - hakamairi
这适用于自由风格,但在管道中我一直在尝试让它工作。 - felix001
最有趣的是,如果我是你,我会向Jenkins Github插件报告此问题。 - hakamairi

0

尝试在流水线中使用项目的检出功能。对我来说有效。

enter image description here


我尝试使用以下代码 git branch: '*', url: 'https://github.com/rickdonato/cicd-demo-1',但是没有成功。可能问题出在我的语法上... - felix001

0
如果您想定期构建,无论是否提交,请使用“定期构建”。 “轮询 SCM”会检查存储库中是否有更改,然后进行构建。 因此,取决于您想要做什么。

enter image description here


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