Рабочие стадии параллельно с рабочим процессом/трубопроводом Дженкинса
Мне интересно, как параллельные шаги должны работать с плагином Workflow/pipe Jenkins, особенно. как смешивать их с этапами сборки. Я знаю об общей схеме:
parallel(firstTask: {
// Do some stuff
}, secondTask: {
// Do some other stuff in parallel
})
Однако, я хотел бы запустить пару этапов параллельно (на том же node, который имеет несколько исполнителей), поэтому я попытался добавить такие этапы:
stage 'A'
// Do some preparation stuff
parallel(firstTask: {
stage 'B1'
// Do some stuff
}, secondTask: {
stage 'B2'
// Do some other stuff in parallel
})
stage 'C'
// Finalizing stuff
Это не работает должным образом. Задачи "делать вещи" выполняются параллельно, но параллельные этапы заканчиваются немедленно и не включают материал, который они должны содержать. Как следствие, Stage View не показывает правильный результат, а также не связывает журналы.
Могу ли я строить разные этапы параллельно или это "параллельный" шаг, предназначенный только для одного этапа?
Ответы
Ответ 1
Нельзя размещать в parallel
устаревший не-блочный stage
(как в исходном вопросе).
По JENKINS-26107, stage
принимает блок-аргумент. Вы можете разместить parallel
внутри stage
или stage
внутри parallel
или stage
внутри stage
и т.д. Однако визуализации сборки не гарантируют поддержку всех вложений; в частности
- Встроенные шаги трубопровода ( "таблица дерева", перечисляющая каждый шаг, выполняемый сборкой) показывает произвольное размещение
stage
.
- Плагин Pipeline Stage View в настоящее время отображает только линейный список этапов в том порядке, в котором они были запущены, независимо от структуры вложенности.
- Blue Ocean отобразит этапы верхнего уровня, плюс
parallel
ответкит внутри этапа верхнего уровня, но в настоящее время не более.
JENKINS-27394, если будет реализован, отобразится произвольно вложенное stage
s.
Ответ 2
этот синтаксис теперь устарел, вы получите эту ошибку:
org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed:
WorkflowScript: 14: Expected a stage @ line 14, column 9.
parallel firstTask: {
^
WorkflowScript: 14: Stage does not have a name @ line 14, column 9.
parallel secondTask: {
^
2 errors
Вы должны сделать что-то вроде:
stage("Parallel") {
steps {
parallel (
"firstTask" : {
//do some stuff
},
"secondTask" : {
// Do some other stuff in parallel
}
)
}
}
Ответ 3
Я только что протестировал следующий конвейер, и он работает
parallel firstBranch: {
stage ('Starting Test')
{
build job: 'test1', parameters: [string(name: 'Environment', value: "$env.Environment")]
}
}, secondBranch: {
stage ('Starting Test2')
{
build job: 'test2', parameters: [string(name: 'Environment', value: "$env.Environment")]
}
}
Это задание с именем "trigger-test" принимает один параметр с именем "Среда"
Задание 'test1' и 'test2' - это простые задания:
Пример для 'test1'
- Один параметр с именем "Среда"
- Pipeline: echo "$ env.Environment-TEST1"
При выполнении я могу видеть обе стадии в одно и то же время
Ответ 4
Я думаю, что это было официально реализовано сейчас:
https://jenkins.io/blog/2017/09/25/declarative-1/