Aljaz
Aljaz

Reputation: 303

Jenkins 2.8 pipeline loop to trigger same job multiple time with different parameters

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.

Upvotes: 3

Views: 7702

Answers (2)

Aljaz
Aljaz

Reputation: 303

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
            }
        }
    }

Upvotes: 6

cpanato
cpanato

Reputation: 429

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
            }
        }
    }
}

Upvotes: 2

Related Questions