防止两个作业在同一节点上同时运行,但允许在不同节点上同时运行

时间:2015-09-28 07:38:04

标签: jenkins

我正在使用Jenkins 1.609 我有一个要求,其中 1)在同一节点上不能同时执行两个作业 2)它们可以在不同节点上触发时同时执行。 在所有从属节点上配置的执行程序都不是1.

默认Jenkins行为: 如果作业A和作业B都在同一节点上被触发,则作业B进入执行者饥饿状态,因为构建正在等待太长时间"与执行它所花费的时间相比。

尝试使用"排除插件"。它有助于实现第一点而不是第二点。

此外,尝试使用Throttle并发构建插件但仍然是作业B进入执行者饥饿状态

有没有办法可以实现这两点,即阻止在同一节点上同时运行作业但可以在不同的节点上运行,而第二个作业不会进入执行器饥饿状态,因为我无法改变作业的顺序。

2 个答案:

答案 0 :(得分:1)

您可以使用以下插件。 https://wiki.jenkins-ci.org/display/JENKINS/Exclusion-Plugin

在此插件中,您可以将文件分配为作业的资源,该作业将在作业启动时创建。另一项工作将尝试使用相同的文件作为锁资源,并将等待第一个文件释放它,但它不依赖于Node。

以下插件也可用于释放和获取锁定。 https://wiki.jenkins-ci.org/display/JENKINS/Locks+and+Latches+plugin

还有一种方法,只需在临时位置写一个锁文件并检查文件以使你的作业等待,一旦该文件消失,你的工作就可以继续,它可以在作业结束后删除锁文件。这样,您可以在同一主机上运行作业,并且它们可以在不同节点上并行运行。

答案 1 :(得分:0)

通过将执行程序的数量设置为1 ,您已经阻止了两个作业在同一节点(从属)上运行。要允许两个作业在其他相同的从站上运行,请使用标签,在使用" to" 仅使用与此节点匹配的标签表达式构建作业"。

例如,添加标签" PREFERRED "到两个节点。然后,对于作业A和B,设置"限制可以运行此作业的位置"到" 首选"。

任何一个作业都可以在任何匹配的从站上启动,并且两个作业可以并行运行。

如果您为任何奴隶增加了超过1的执行者数量,那么您将需要使用锁定/排除插件。