Вызов нескольких нижестоящих заданий из вышестоящего задания конвейера Jenkins - PullRequest
0 голосов
/ 14 января 2019

У меня есть два задания на основе конвейера

Parent_Job (имеет строковые параметры project1 и project2)

@NonCPS
def invokeDeploy(map) {
    for (entry in map) {
        echo "Starting ${entry.key}"
        build job: 'Child_Job', parameters: [
                            string(name: 'project', value: entry.key),
                            string(name: 'version', value: entry.value)
                        ], quietPeriod: 2, wait: true
        echo "Completed ${entry.key}"
    }
}
pipeline {
    agent any

    stages {
        stage('Test') {
            steps {
                script {
                    invokeDeploy(params)
                }    
            }
        }
    }
}

Child_Job (имеет строковые параметры проекта и версии)

pipeline {
    agent any

    stages {
        stage('Test') {
            steps {
                script {
                    echo "${params.project} --> ${params.version}"
                }    
            }
        }
    }
}

Вывод родительского задания

[Pipeline] {
[Pipeline] stage
[Pipeline] { (Test)
[Pipeline] script
[Pipeline] {
[Pipeline] echo
Starting project2
[Pipeline] build (Building Child_Job)
Scheduling project: Child_Job
Starting building: Child_Job #18
[Pipeline] }
[Pipeline] // script
[Pipeline] }
[Pipeline] // stage
[Pipeline] }
[Pipeline] // node
[Pipeline] End of Pipeline
Finished: SUCCESS

Я ожидал, что нижестоящее задание будет вызываться дважды (для проекта1 и проекта2), но оно вызывается только один раз (для проекта2)

Что-то явно не так с этим скриптом?

1 Ответ

0 голосов
/ 14 января 2019

Похоже, проблема с опцией wait: true включена для шага build job. Если вы измените его на wait: false, оно будет выполнено 2 раза. Я попробовал это на этом тестовом конвейере:

@NonCPS
def invokeDeploy(map) {
    for (entry in map) {
        echo "Starting ${entry.key}"
        build job: 'pipeline', quietPeriod: 2, wait: false
        echo "Completed ${entry.key}"
    }
}
pipeline {
    agent any

    stages {
        stage('Test') {
            steps {
                script {
                    def sampleMap = [first_job:'First', second_job:'Second']
                    invokeDeploy(sampleMap)
                }    
            }
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...