2013-10-14 83 views
0

我们的Jenkins服务器配置有两个主要作业来构建apks。每个作业都有一个子作业,它将APK安装到连接到构建服务器并执行UI测试的Android设备上。如何强制执行单独的Jenkins作业的同步执行?

例如:

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

其中

Project-A-apk启动项目A测试
项目3210-B-APK踢断项目-B-测试

两个项目-A-测试和项目-B-测试安装和相同的测试设备上运行。

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

有没有办法配置一个作业在执行之前等待其他作业(不在其父链中)?

回答

0

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

0

你应该尝试Build Blocker Plugin

这个插件保持实际工作队列如果 当前运行的作业至少一个名称与给定的正 表达式之一匹配。

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

1

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

设置一个类别名称,例如android-device的Maximum Concurrent Builds Per Node设置为1.将此类别指定给在Android设备上运行测试的作业。一旦安装插件,就可以在作业配置页面上分配类别。

所有分配了相同类别名称的作业将连续执行而不是同时执行。