如何在运行作业时暂停Jenkins SCM轮询

3

我继承了一个稍微奇怪的设置(更改它将耗费时间):

我正在使用Jenkins和SCM(Perforce)轮询,但触发的作业除了触发本身外,在任何方面都不使用SCM Workspace。然后构建从最新修订中检索并构建。这个设置可行,但会创建不必要的积压:

10:00 submit Rev#100001
10:05 SCM polls this and queue a build job#101
10:06 job#101 start (will take ~2H)
10:30 submit Rev#100002
10:35 SCM polls this and queue a build job#102
11:00 submit Rev#100003
11:35 SCM polls this and queue a build job#103
12:00 job#101 exits
12:01 job#102 start (will take ~2H)

假设没有新的提交,job#103job#102 的不必要重复。


更新:@Slav答案中,我意识到我的表述不够清晰。SCM触发器与代码库的拉取无关,这导致了这种异常情况:

job#101 reports that it was triggered by Rev#100001 and builds from Rev#100001
job#102 reports that it was triggered by Rev#100002 and builds from Rev#100003
job#103 reports that it was triggered by Rev#100003 and builds from Rev#100003

这也解释了为什么有多个排队的运行:从Jenkins的角度来看,每个排队的构建都是不同的。


我希望消除这个积压。

可以通过以下方式实现:

  • 当作业#101正在运行时,请勿轮询SCM(最佳选项)
  • 当作业#103排队时-如果作业#102尚未开始,则删除作业#102。
  • 还有其他方法吗?

这可行吗?如果可以,如何实现?


即使您更新了代码,我仍然不明白为什么您认为102号和103号工作是“不必要的”。代码已经改变,难道您不需要使用新更改构建代码吗?如果您不想构建每个更改,可以考虑按时间安排构建,例如,“我们每天4次构建代码,分别在早上6点、中午12点、下午6点和午夜”。 - Bryan Pendleton
1个回答

0

你确定这是发生了吗?即使有多个触发器之间,我也从未见过超过1个排队运行。

当我遇到构建时间超过轮询间隔的情况时,最简单的手动修复方法是在启动后禁用作业(并在完成后重新启用它),但这只适用于异常和手动干预的情况。

如果您想要自动化此操作,请查看“安静期”高级选项(在作业配置下)。


据我所知,在我的情况下,“静默期”做了错误的事情。我需要它在构建开始后等待N秒,然后再进行下一次SCM轮询;而不是在SCM轮询之后等待,然后再开始构建。 - Chen Levy

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