如何强制同步执行单独的Jenkins作业?

时间:2013-10-14 17:07:53

标签: jenkins

我们的Jenkins服务器配置了两个主要作业来构建apks。每个作业都有一个子作业,可以将APK安装到附加到构建服务器并执行UI测试的Android设备上。

例如:

  

项目-A-APK
  项目-A-测试
  项目-B-APK
  项目-B-测试

,其中

  

Project-A-apk启动Project-A-tests
  Project-B-apk启动Project-B-tests

  

Project-A-tests和Project-B-tests都在同一个测试设备上安装和运行。

问题是,我们不能让测试作业同时运行,因为他们都会尝试与同一设备进行交互。

有没有办法在执行之前将作业配置为等到其他作业(不在其父链中)?

4 个答案:

答案 0 :(得分:1)

我使用Throttle Concurrent Builds Plugin来控制作业何时应该同时运行。

设置类别名称,例如android-device,每个节点的最大并发构建数设置为1.将此类别分配给在Android设备上运行测试的作业。安装插件后,就可以在作业配置页面上分配类别。

分配了相同类别名称的所有作业将按顺序执行,而不是同时执行。

答案 1 :(得分:0)

您应该尝试Build Blocker Plugin

  

如果至少有一个名称,此插件会将实际作业保留在队列中   当前正在运行的作业与给定的常规作业匹配   表达式。

另一种方法是将Jenkins执行程序的数量限制为一个。这将确保只有一个作业正在运行而其他作业在队列中等待。但是,这可能会阻止其他未访问测试设备的未来作业。

答案 2 :(得分:0)

还有一个:Heavy Job Plugin

您可以对Android作业进行加权以阻止所有执行程序。

答案 3 :(得分:0)

我们使用Jenkins Exclusion Plugin来管理必须共享几个不同数据库资源的构建。此插件的工作原理是允许您在构建步骤中定义关键块。只有在可以获取特定资源的情况下,才会运行关键块。在块结束时,资源被释放。这意味着您不必阻止整个作业,只需要阻止您需要资源的部分。