【问题标题】:Preventing two jobs to run simultaneously on same node but allowing to run simultaneously on different nodes防止两个作业在同一节点上同时运行,但允许在不同节点上同时运行
【发布时间】:2015-09-28 07:38:03
【问题描述】:

我正在使用 Jenkins 1.609 我有一个要求 1) 没有两个作业可以在同一个节点上同时执行,但是 2) 它们在不同节点上触发时可以同时执行。 所有从节点上配置的执行器数量为1。

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

已尝试使用“排除插件”。它有助于实现第一点,但对第二点没有帮助。

另外,已经尝试使用 Throttle 并发构建插件,但作业 B 仍然进入执行器饥饿状态

有什么方法可以实现这两点,即防止在同一节点上同时运行作业,但可以在不同节点上运行,并且第二个作业不会进入执行器饥饿状态,因为我无法更改作业的顺序。

【问题讨论】:

    标签: jenkins


    【解决方案1】:

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

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

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

    另一种方法可能是,只需在临时位置写入一个锁定文件并检查该文件以使您的工作强制等待,一旦该文件消失,您的工作就可以继续,一旦工作结束,它可以删除锁定文件.通过这种方式,您可以让作业在同一主机上运行,​​并且它们可以在不同节点上并行运行。

    【讨论】:

    • 感谢 Vishal 的回复。排除插件不满足我在问题中提到的要求。我没有尝试 Locks and Latches 插件,而是使用了配置了 Multi-Project Throttle Category 的 Throttle Concurrent Builds 插件。它奏效了。
    • Exclusion-Plugin 非常适合这种确切的场景。在此处查看示例stackoverflow.com/a/35255272/658497
    【解决方案2】:

    您已经通过将 执行程序的数量设置为 1 来阻止两个作业在同一节点(从属节点)上运行。要允许两个作业在其他方面相同的从站上运行,请使用标签,将“Usage”下的从站限制为“仅构建标签表达式匹配此节点的作业”。 p>

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

    然后任何一个作业都可以在任何匹配的从属设备上启动,两个作业可以并行运行。

    如果您将任何从属服务器的执行器数量增加到 1 以上,那么您将需要使用锁定/排除插件。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-07
      • 2016-12-20
      相关资源
      最近更新 更多