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