在Jenkins Pipeline一次触发时并行触发多个构建

时间:2020-10-16 07:15:02

标签: jenkins jenkins-pipeline jenkins-plugins jenkins-declarative-pipeline

Context

我有一些基于正则表达式的Jenkins管道,用于选择要运行的匹配作业。每个管道的下游作业数量约为60。

因此,我写下了声明性脚本以选择这些匹配的作业,然后使用Jenkins Build Plugin并行构建它。一般来说,如下所示:

Finish deploy to A -->   Pipeline A (master node)
                            ->> 60 downstream jobs (slave nodes)

Finish deploy to B -->   Pipeline B (master node)
                            ->> 60 downstream jobs (slave nodes)

Finish deploy to C -->   Pipeline C (master node)
                            ->> 60 downstream jobs (slave nodes)

主节点是用于运行Jenkins的服务器。

从节点是用于运行任务的AWS EC2实例,我的池围绕32个服务器,可以一次使用多达180个任务。

Expected

比方说,我依次有那些管道触发的管道A,管道B,管道C,然后我期望下游作业将被依次触发。这意味着将计划从A开始的60个作业,然后在流水线B,流水线C上进行构建,因为从属执行器仍然是免费的并且可以使用。

Observed

即使AWS EC2实例不运行任何任务(全部可用),管道也不会一次触发所有作业,而是触发一部分。这意味着将首先在管道A中构建随机数的作业,然后过一会儿,其余的将被构建。

管道脚本:

Stage('Integration Test Run') {
            steps {
                script {
                    matchingJobs = commonPipelineMethods.getTestJobs(venture_to_test, testAgainst)
                    parallel matchingJobs.collectEntries{downstreamJob-> [downstreamJob.name, commonPipelineMethods.buildSingleJob(this, downstreamJob)]}
                }
            }
        }
def buildSingleJob(steps, downstreamJob) {
    return {
        def result = steps.build job: downstreamJob.fullName, propagate: false
        steps.echo "${downstreamJob.fullName} finished: ${result.rawBuild.result}"
        }
    }

因此,我不确定是否需要配置任何内容,设置管道脚本以使那些下游作业一次运行。

有人可以调查一下并给我一些建议吗?谢谢

0 个答案:

没有答案