У меня есть сервер Jenkins, использующий плагин Pipeline. Здесь я хочу запустить несколько сборок параллельно и дождаться завершения сборки, прежде чем перейти к следующему этапу моего конвейера.
Я смогу сделать это успешно, если явно напишу задания сборки, например:
parallel 'one': {
build job: 'job1',
parameters: [
[$class: 'StringParameterValue', name: 'CONFIG', value: "foo"]
],
propagate: false,
wait: true
}, 'two': {
build job: 'job2',
parameters: [
[$class: 'StringParameterValue', name: 'CONFIG', value: "foo"]
],
propagate: false,
wait: true
}, 'three': {
build job: 'job3',
parameters: [
[$class: 'StringParameterValue', name: 'CONFIG', value: "foo"]
],
propagate: false,
wait: true
}
Однако на самом деле количество заданий, которые необходимо создать, будет переменным, поэтому явно выписать их невозможно. Я попытался обернуть сборки в закрытие следующим образом:
def createParallel = { String parallelName ->
parallelName: {
build job: 'jobX',
parameters: [
[$class: 'StringParameterValue', name: 'CONFIG', value: "foo"]
],
propagate: false,
wait: true
}
}
parallel (
createParallel('one'),
createParallel('two'),
createParallel('three')
)
Проблема с этим методом заключается в том, что сборки на самом деле не запускаются параллельно - они строятся по одной, ожидая завершения предыдущей сборки. Что я делаю неправильно?