0

我们的 Jenkins 服务器配置了两个主要作业来构建 apk。这些作业中的每一个都有一个子作业,它将 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

4 回答 4

1

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

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

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

于 2013-10-14T18:07:03.903 回答
0

您应该尝试Build Blocker Plugin

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

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

于 2013-10-14T17:18:53.653 回答
0

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

于 2013-10-14T18:19:35.177 回答
0

另一个:Heavy Job 插件

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

于 2013-10-14T18:13:18.530 回答