Jenkins如何在同一节点上防止同一个任务并发运行?

9

我有4个节点和2个作业。任何节点可以同时运行2个作业,任何作业也可以并发执行。我希望能够限制在同一台机器上同时运行相同作业的情况。例如:

作业:J1和J2 节点:N1、N2、N3和N4

我可以在同一节点上同时运行J1和J2。 我可以在N1和N3上同时运行J1。 但是我不想在同一节点上同时运行J1和另一个J1的构建。

我尝试了“锁和闩”、“Jenkins独占执行”、“排除插件”等插件,这些插件在协调不同的作业时效果很好。但我的情况是尝试管理相同作业的不同构建实例。


你忘了提到你正在使用“Throttle”插件... - Gonen
2个回答

16

尝试使用Throttle Concurrent Builds Plugin。它允许限制每个节点或全局运行的项目的并发构建数量。在您的情况下,应设置:

  • 最大总并发构建数:0(=无限制)
  • 每个节点的最大并发构建数:1

6
谢谢您指出0=无限制!我之前一直纠结于为什么将0指定为最大并发构建数仍然会导致并发构建,也就是认为0 = 0。 - rainbowsprinkles

2

上次我检查的时候,每个作业只能同时运行一个实例,即:

如果您按下 [build] 键两次,将执行作业的第一个实例,只有在它完成后,才会开始下一个实例。

您是否真的能够同时运行 Job1-Build1 和 J1-Build2?


1
Gonen,感谢您的回复。是的,我可以同时运行J1-Build1和J1-Build2。实际上,所有作业都可以并发运行,没有任何问题。 我的要求是防止同一作业(即J1)在同一节点上运行:我想防止这种情况:运行J1-Node1和另一个J1-Node1实例。我的要求: 当已经在Node1上运行J1实例(即J1-Node1)时,在不同的节点(即J1-Node2)上启动新的J1实例,而不是在Node1上。 如果Nod2也正在运行J1实例,则等待!谢谢 Marek - Marek Gimza
Marek,你可以采取另一种极端的方式,防止任何J1实例在其他实例完成之前启动,因此J1-build2将不会在J1-build1完成之前启动。应该使用“高级项目选项”部分下的“当下游项目正在构建时阻止构建”选项。 - Gonen

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