3
votes

I am building pipeline workflow in Jenkins v.2.8. What I would like to achieve is to build one step which would trigger same job multiple times as same time with different parameters.

Example: I have a worfklow called "Master" which has one step, this step is reading my parameter "Number" which is a check box with multiple selection option. So user can trigger workflow and select option for Number like "1, 2, 3". Now what I would like to achieve when this step is executed that it calls my job "Master_Child" and triggers "Master_Child" with 3 different parameters at the same time.

I tried to do it in this way:

stage('MyStep') {
        steps {
            echo 'Deploying MyStep'
            script {

                env.NUMBER.split(',').each {
                   build job: 'Master_Child', parameters: [string(name: 'NUMBER', value: "$it")]
                }
            }
        }
    }

But with this it reads first parameter triggers the Mast_Child with parametre 1 and it waits until the jobs is finished, when job is finished then it triggers the same the job with parameter 2.

If I use wait: false on job call, then pipeline workflow just calls this jobs with different parameters but it is not depended if sub job fails.

Any ideas how to implement that ? Thank you in advance.

2

2 Answers

6
votes

I resolved my problem in this way.

stage('MyStage') {
        steps {
            echo 'Deploying MyStep'
            script {
                def numbers = [:]
                env.NUMBER.split(',').each {
                    numbers["numbers${it}"] = {
                        build job: 'Master_Child', parameters: [string(name: 'NUMBER', value: "$it")]
                    }
                }                   
                parallel numbers
            }
        }
    }
2
votes

Set the wait in the build job syntax to false wait: false

stage('MyStep') {
    steps {
        echo 'Deploying MyStep'
        script {

            env.NUMBER.split(',').each {
               build job: 'Master_Child', parameters: [string(name: 'NUMBER', value: "$it")], wait: false
            }
        }
    }
}