Блокировка распараллеленных этапов в Jenkins - PullRequest
0 голосов
/ 27 сентября 2018

Мы пытаемся написать декларативный сценарий сборки Jenkinsfile для параллельного выполнения нескольких этапов на каждом из нескольких этапов, однако мы должны предотвратить одновременное выполнение нескольких сборок, поскольку они зависят от одного и того же ресурса.Поэтому мы попытались использовать Lock , чтобы заблокировать все этапы, так что сборка может завершиться полностью, прежде чем другая попытается использовать те же ресурсы.

Однако мы нашличто этапы блокировки требуют вложенности этапов в родительском и что параллельные этапы могут быть включены только в этап верхнего уровня : WorkflowScript: 24: Parallel stages or branches can only be included in a top-level stage

По сути, мы пытаемся сделать следующее:

#!/usr/bin/env groovy

pipeline {
    agent any

    stages {
        stage('parent') {
            options {
                lock('resource')
            }
            stages {
                stage('build') {
                    steps {
                        parallel( 
                            'app1': { build("app1") },
                            'app2': { build("app2") },
                        )
                    }
                }

                stage('deploy') {
                    steps {
                        parallel(
                            'app1': { deploy("app1") },
                            'app2': { deploy("app2") },
                        )
                    }
                }
            }
        }
    }
}

Существуют ли обходные пути для достижения такого поведения?

1 Ответ

0 голосов
/ 28 сентября 2018

Устраняет ли это вашу проблему?

pipeline {
    agent any
    options {
        lock('resource')
    }
    stages {
        stage('build') {
            parallel {
                stage('app1') {
                    steps {
                        echo("build app1")
                    }
                }
                stage('app2') {
                    steps {
                        echo("build app2") 
                    }
                }
            }
        }
        stage('deploy') {
            parallel {
                stage('app1') {
                    steps {
                        echo("deploy app1")
                    }
                }
                stage('app2') {
                    steps {
                        echo("deploy app2") 
                    }
                }
            }
        }
    }
}

Возможно, вам потребуется обновить до последний код конвейера Это блокирует ресурс для всей работы.Если вы хотите заблокировать ресурс для каждого из параллельных этапов, я бы предложил, чтобы этапы не были параллельными

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...