在我的团队中,我们有一个项目,我们想要进行持续集成式测试。我们的构建大约需要2个小时,由“轮询SCM”触发器(使用Perforce作为服务器)触发,我们有两个构建节点。
目前,如果有人检查更改,一个构建节点将立即启动,但如果检入另一个更改,则另一个节点将不会启动,因为它正在等待上一个作业完成。但是,我可以希望其他构建节点尽快使用较新的签入来启动构建,这样我们就可以最大化正在发生的连续测试的数量(这样,如果一个构建失败,我们就会知道更早而不是更晚)。
是否有任何简单的方法来配置Jenkins作业(使用Poll SCM对Perforce服务器)在作业的另一个实例已在运行时不阻止?
不幸的是,由于项目的性质,不可能简单地将项目分解为多个构建作业,这些作业在多个从属组件中流水线化(尽管我希望将其更改为以这种方式工作)。 / p>
答案 0 :(得分:3)
如果需要,使用"执行并发构建" Jenkins配置中的选项。
答案 1 :(得分:1)
只是为了在这里注册以防有人需要它,在我使用的版本 (Jenkins 2.249.3) 中,我必须取消选中子作业中的选项 Do not allow concurrent builds
从父作业多次调用。
代码或多或少是这样的:
stage('STAGE IN THE PARENT JOB') {
def subParallelJobs = [:]
LIST_OF_PARAMETERS = LIST_OF_PARAMETERS.split(",")
for (int i = 0; i < LIST_OF_PARAMETERS.size(); i++) {
MY_PARAMETER_VALUE = LIST_OF_PARAMETERS[i].trim()
MY_KEY_USING_THE_PARAMETER_TO_MAKE_IT_UNIQUE = "JOB_KEY_${MY_PARAMETER_VALUE}"
def jobParams = [ string(name: 'MY_JOB_PARAMETER', value: MY_PARAMETER_VALUE) ]
subParallelJobs.put("MY_KEY_USING_THE_PARAMETER_TO_MAKE_IT_UNIQUE", {build (job: "MY_CHILD_JOB", parameters: jobParams)})
}
parallel(subParallelJobs)
}
}