Многоуровневая конвейерная работа Jenkins выполняется неоднозначно при одновременной фиксации из двух веток - PullRequest
0 голосов
/ 29 ноября 2018

Я создал многоотраслевой конвейер, и он строит одну работу.Я использовал регулярные выражения для ветвей дескрипторов, поэтому выполняются только мастер или разработка.И я переключился с gitlab на конвейер.Если я фиксирую отдельно от мастера или разработки, он запускает конвейер, и конвейер запускает задание в правильной ветке.Все хорошо.Если я совершу в то же время от мастера и развития;конвейер работает для обеих веток (конвейер> мастер и конвейер> прогоны разработки), но они используют одну и ту же работу.Так что работа выполняется в одном из филиалов.Я ожидал выполнить две работы для каждого мастера и ветки разработки.enter image description here

Я клонировал эту работу, чтобы решить мою проблему, но мне интересно, чего мне не хватает?Могу ли я использовать одно задание для нескольких филиалов или мне следует создавать разные задания для каждого филиала, и безопасно ли это для одновременных коммитов?

Спасибо!

Ответы [ 2 ]

0 голосов
/ 30 ноября 2018

Предполагая, что ваш Jenkinsfile, используемый для многоотраслевого конвейера, запускает другую работу безоговорочно в филиале, Jenkins делает все как положено.

Для достижения этого вам необходимо добавить некоторую дополнительную логику.Например, вы можете добавить имя ветки в качестве параметра к нижестоящему заданию сборки при запуске сборки.Это должно вызвать отдельные последующие сборки:

build job: '<job name>', parameters: [string(name: 'Branch', value: env.BRANCH_NAME)]

Вы также можете просто использовать BRANCH_NAME.Однако я обычно хотел бы использовать env.BRANCH_NAME только для того, чтобы указать, что это переменная окружения.

Однако, возможно, лучше рассмотреть следующее:

ВместоДля запуска другого задания с помощью шага build вы должны интегрировать его содержимое в Jenkinsfile самого многоотраслевого конвейера.Затем он будет выполняться один раз для каждой ветви.Именно так вы можете максимально эффективно использовать многоотраслевые конвейеры.

0 голосов
/ 29 ноября 2018

Согласно документации Jenkins

"Тип проекта Multibranch Pipeline позволяет вам реализовать разные Jenkinsfiles для разных веток одного и того же проекта. В проекте Multichranch Pipeline Jenkins автоматически обнаруживает,управляет и выполняет конвейеры для ветвей, которые содержат Jenkinsfile в управлении исходным кодом. "

Если вы отметили Jenkinsfile в управлении исходным кодом, то Jenkins должен создать задания по сборке для каждой вашей ветки.

Как вы упомянули "я использовал регулярное выражение для ветвей дескрипторов, поэтому выполнялись только мастер или прогоны разработки", в конфигурации должно быть что-то не так.Это не требуется для многоотраслевого проекта.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...