Блокировка ресурса в конвейере Jekinsfile для параллельных и последовательных этапов одновременно

Я пытаюсь запустить следующий процесс в моем Jenkinsfile:

  1. Создайте приложение
  2. Триггерное развертывание двух компонентов в тестовой среде параллельно
    • фу развернуть
    • бар развернуть
  3. Запускать тесты на развернутом приложении

Шаги 2 и 3 требуют блокировки ресурса, потому что у меня доступна только одна тестовая среда.

Нет проблем в достижении этого без выполнения шага 2 параллельно, однако, когда я настраиваю Jenkinsfile для их совместного выполнения, я получаю следующую ошибку от Jenkins:

WorkflowScript: 19: Parallel stages or branches can only be included in a top-level stage. @ line 19, column 7.
                    stage('Deploy Foo') {
     ^

Вот полный Jenkinsfile:

pipeline {
    agent any

    stages {
        stage('Build') {
            steps {
                powershell(script: '.\\ci\\build.ps1 -Script .\\ci\\build\\build.cake')
            }
        }

        stage('Deploy and run tests') {
            when {
                branch('develop')
            }

            options {
                lock('test-env')
            }

            stages {
                stage('Deploy') {
                    parallel {
                        stage('Deploy Foo') {
                            steps {
                                build(job: 'Deploy_Foo')
                            }
                        }

                        stage('Deploy Bar') {
                            steps {
                                build(job: 'Deploy_Bar')
                            }
                        }
                    }
                }

                stage('Run tests') {
                    steps {
                        powershell(script: '.\\ci\\build.ps1 -Script .\\ci\\test\\build.cake')
                    }
                }
            }
        }
    }
}

Я также пробовал решение с блокировкой ресурса test-env отдельно для этапов развертывания и тестирования, однако это увеличивает риск состояния гонки, когда какое-либо другое запущенное задание может ожидать этот ресурс и "переходить" между этапами развертывания и тестирования Текущее место работы.

Есть ли способ достичь такого сочетания последовательных и параллельных этапов, как описано выше в Jenkinsfile?

0 ответов

Другие вопросы по тегам