我们的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都在同一个测试设备上安装和运行。
问题是,我们不能让测试作业同时运行,因为他们都会尝试与同一设备进行交互。
有没有办法在执行之前将作业配置为等到其他作业(不在其父链中)?
答案 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来管理必须共享几个不同数据库资源的构建。此插件的工作原理是允许您在构建步骤中定义关键块。只有在可以获取特定资源的情况下,才会运行关键块。在块结束时,资源被释放。这意味着您不必阻止整个作业,只需要阻止您需要资源的部分。