首页 > 解决方案 > 只允许在一台机器上完成一项工作

问题描述

我们使用 Jenkins 的方式要求我们为每台机器定义两个节点。一个 Jenkins 节点以普通用户身份运行(称为 Normal),另一个以管理员身份运行(称为 Admin)。因此它们显示为两个独立的节点,即使它们存在于同一台从机上。

但是,我们遇到了并发问题。因为我们的作业在两个节点之间切换,所以有可能将另一个作业(作业 B)分配给(例如)Normal 节点,而 Admin 节点正在处理(例如)作业 A 的一部分。

有没有办法告诉 Jenkins,如果正在使用一台机器的 Normal 节点或 Admin 节点,那么它不应该给另一个节点一些其他工作?

为了详细说明这个问题——我们有一个我们目前连续运行的测试套件。我们所有的 Jenkins 主服务器都有多个从服务器,因此我们自然希望利用并行化,因此套件不会花费 2 个小时使用一台机器而其他机器闲置。因此,这并不是确保一次只运行一个作业的问题,而是告诉 Jenkins 在其伙伴节点繁忙时不要使用该节点的问题。

标签: jenkins

解决方案


该问题与同一台机器上的两个节点或一个特权与否无关;这是一个阻止一个作业运行而另一个仍在运行的问题。

我相信您正在使用标签限制哪些作业可以在哪些节点上运行

您可以使用Build Blocker 插件来阻止作业运行,而其他 . 还有其他插件选项也可能对您有用。

您还可以使用参数化触发器在线执行其他作业。它可以作为构建步骤或构建后步骤运行。

您还可以通过${JENKINS_URL}/computer/myNode/configure|限制给定节点上的执行程序数量。# 的执行者,所以如果这是一个问题,你不会在同一个节点上运行多个作业。


推荐阅读