Jenkins中同一项目的多个并发构建

时间:2016-06-20 23:12:34

标签: jenkins continuous-integration perforce

在我的团队中,我们有一个项目,我们想要进行持续集成式测试。我们的构建大约需要2个小时,由“轮询SCM”触发器(使用Perforce作为服务器)触发,我们有两个构建节点。

目前,如果有人检查更改,一个构建节点将立即启动,但如果检入另一个更改,则另一个节点将不会启动,因为它正在等待上一个作业完成。但是,我可以希望其他构建节点尽快使用较新的签入来启动构建,这样我们就可以最大化正在发生的连续测试的数量(这样,如果一个构建失败,我们就会知道更早而不是更晚)。

是否有任何简单的方法来配置Jenkins作业(使用Poll SCM对Perforce服务器)在作业的另一个实例已在运行时不阻止?

不幸的是,由于项目的性质,不可能简单地将项目分解为多个构建作业,这些作业在多个从属组件中流水线化(尽管我希望将其更改为以这种方式工作)。 / p>

2 个答案:

答案 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)
    }
}