Я пытаюсь запустить следующий процесс в моем Jenkinsfile:
- Сборка приложения
- Запуск развертывания двух компонентов в тестовой среде параллельно
- foo deploy
- бар развернуть
- Запуск тестов в развернутом приложении
Шаги 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?