一台机器上只允许一个作业



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

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

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

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

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

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

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

您也可以使用参数化触发器来内联其他作业的执行。它可以作为构建步骤或构建后步骤运行。

您还可以通过${JENKINS_URL}/computer/myNode/configure|#执行器来限制给定节点上的执行器数量,这样,如果出现问题,就不会在同一节点上运行多个作业。

以下是我解决此问题的方法:

  1. 将每个从属节点上的执行器数量设置为1
  2. 强迫我的工作在整个工作期间都有一个执行人

具体来说,在我们用于所有工作的groovy脚本中,在最顶部,在我们找到需要哪两个(admin和normal,在同一从属节点上运行(节点后,我们使用以下内容:n

节点(myNormalNode({//工作的所有其他部分,包括:节点(myAdminNode({//管理节点的其他命令}//返回到普通节点的命令节点(主节点({//要在master上运行的代码}//等等}

这使得Jenkins在完成第一个作业之前不会将任何其他作业分配给这台计算机。

相关内容

最新更新