Jenkins 用于启动并行生成的参数化管道作业

Jenkins 用于启动并行生成的参数化管道作业,jenkins,jenkins-pipeline,Jenkins,Jenkins Pipeline,我正在为我的参数化管道作业尝试以下代码。我想启动从参数中获取的作业名称以并行运行。 这些作业也参数化了作业。如何启动参数化管道作业以触发并行生成。我也尝试使用列表,但它不起作用。谁能告诉我哪里出了问题 def stepsForParallel = [:] node { JOBS=JOB_NAMES.split(','); for (job in JOBS) { def stepName = "running_${job}" stepsFor

我正在为我的参数化管道作业尝试以下代码。我想启动从参数中获取的作业名称以并行运行。 这些作业也参数化了作业。如何启动参数化管道作业以触发并行生成。我也尝试使用列表,但它不起作用。谁能告诉我哪里出了问题

def stepsForParallel = [:]
node {
     JOBS=JOB_NAMES.split(',');
     for (job in JOBS) {
         def stepName = "running_${job}"
         stepsForParallel[stepName] = { ->  build job: "runnning_$job", parameters: [string(name: 'BRANCH',value: $BRANCH),string(name: 'CHANGE_NUMBER',value: $CHANGE_NUMBER)] }
     } 

parallel stepsForParallel
}

我得到了如下输出:

[Pipeline] parallel
[Pipeline] [running_a] { (Branch: running_a)
[Pipeline] [running_b] { (Branch: running_b)
[Pipeline] [running_a] }
[running_a] Failed in branch running_a
[Pipeline] [running_b }
[running_b] Failed in branch running_b
[Pipeline] }
[Pipeline] End of Pipeline

an exception which occurred:

in field itr
in field target
in field continue_
in field parent
in field parent
in field parent
in field parent
in field parent
in field parent
in field capture
in field def
in field locals
in field capture
in field def
in field closures
in object org.jenkinsci.plugins.workflow.cps.CpsThreadGroup@5e5624f3
Caused: java.io.NotSerializableException: java.util.AbstractList$Itr
at      org.jboss.marshalling.river.RiverMarshaller.doWriteObject(RiverMarshaller.java:860)
at org.jboss.marshalling.river.RiverMarshaller.doWriteFields(RiverMarshaller.java:1032)
at org.jboss.marshalling.river.RiverMarshaller.doWriteSerializableObject(RiverMarshaller.java:988)
如何启动参数化管道作业以触发并行生成。我也尝试使用列表,但它不起作用。谁能告诉我哪里出了问题

这与此有关。
def stepsForParallel = [:]
node {
     JOBS=JOB_NAMES.split(',');
     for (job in JOBS) {
         def stepName = "running_${job}"
         stepsForParallel[stepName] = { ->  build job: "runnning_$job", parameters: [string(name: 'BRANCH',value: $BRANCH),string(name: 'CHANGE_NUMBER',value: $CHANGE_NUMBER)] }
     } 

parallel stepsForParallel

尝试删除
循环的
周围的
节点{}
,并将迭代移动到
@NonCPS
函数中。像这样的

@NonCPS
def stepsForParallel(def jobsName) {
    def steps = [:]
    jobs = jobsName.split(',')
    for (job in jobs) {
        def stepName = "running_${job}"
        steps[stepName] = { ->
            build job: "runnning_$job", parameters: [string(name: 'BRANCH', value: BRANCH), string(name: 'CHANGE_NUMBER', value: CHANGE_NUMBER)]
        }
    }
    return steps
}

parallel stepsForParallel(JOB_NAMES)

尝试删除
循环的
节点{}
周围的
!即使作业为,也不会返回并行作业的状态completed@no1在您的回答中,我看不出您希望得到被调用构建的结果状态。这将需要一个不同的方法。不,我的意思是,完成后,工作应该退出,但它冻结!如果我想使用2个拆分函数,并且作业名称是一个参数(复选框),那么有没有更好的方法,它不起作用