У меня проблема с конвейером. (Версия Дженкинса 1.165.1)
У меня есть:
- 3 клиента: («AAA», «BBB» и «CCC»).
- 2 параметризованных задания сборки: (Deploy_PrepDB_SHELL и Deploy_TargetDB_SHELL)
Конвейер (перечисленный ниже состоит из 2 этапов, по одному для каждой параметризованной сборки. Каждая параметризованная сборка запускается 3 раза, по одному разу для каждого клиента. На каждом этапе 3 клиента могут работать параллельно.
Однако я хочу, чтобы этап № 2 запускался ТОЛЬКО ПОСЛЕ того, как все 3 сборки из этапа № 1 завершены и успешно завершились. Моя проблема в том, что этап № 2 начинается, как только все сборки из этапа №1 были начаты.
Этап №2 не учитывает окончательный статус этих сборок ... Итак, этап №2 начинается, когда сборки из этапа №1 выполняются, и это вызывает ошибки.
FWIW, использование сборок с жестко запрограммированными клиентскими значениями фактически решает эту проблему. Но мне нужно использовать параметризованные сборки. У нас более 3-х клиентов и 2 строительных рабочих. Жестко запрограммированные сборки приводят к увеличению количества сборок.
Как я могу сделать так, чтобы на этапе № 2 (в процессе разработки) было известно о результатах сборок на этапе № 1? И продолжать только после успешной сборки Этапа №1?
Решение, о котором я думаю, состоит в использовании предварительных действий и пост-действий в параметризованных сборках для чтения / записи статусов в таблицу БД. Но это кажется неуклюжим, и я думаю, что у Дженкинса, вероятно, есть какой-то более простой механизм для обработки этого сценария.
Кто-нибудь из вас смог реализовать что-то подобное?
Спасибо
/* Jenkins Pipeline in Groovy */
def clientlist = ['AAA', 'BBB', 'CCC']
/*
Stage #1
*/
stage concurrency: 3, name: '1. Deploying Prep Database'
echo 'Deploying Prep Database DacPac'
for(item in clientlist)
{
build job: 'Deploy_PrepDB_SHELL', parameters: [[$class: 'StringParameterValue', name: 'CLIENT_NAME', value: item]], wait: false
Thread.sleep(1000)
}
/*
Stage #2
Should not start until all 3 builds from previous stage have successfully finished!
*/
stage concurrency: 3, name: '2. Deploying Target Database'
echo 'Deploying Target Database DacPac'
for(item in clientlist)
{
build job: 'Deploy_TargetDB_SHELL', parameters: [[$class: 'StringParameterValue', name: 'CLIENT_NAME', value: item]], wait: false
Thread.sleep(1000)
}
wait
значение true, чтобы дождаться вывода заданий перед переходом к следующему этапу? Не уверен, что он будет работать с параллелизмом ... - person Pom12   schedule 27.03.2017