2015-09-25 3 views
23

Я новичок в плагине Jenkins Pipeline и особенно новичок в плагине с многоканальным конвейером. В стандартной сборке у меня есть доступ к переменной $ GIT_BRANCH, чтобы знать, какая ветка строится. Однако эта переменная не установлена ​​в многоблочном трубопроводе. Я тоже пробовал env.GIT_BRANCH, и я попытался передать $ GIT_BRANCH в качестве параметра для сборки. Ничто не работает. Я предположил, что, поскольку сборка знает о построенной ветке (я могу видеть название ветки в верхней части вывода консоли, что есть что-то, что я могу использовать, я просто не могу найти ссылки на нее.Дженкинс. Многогранный конвейер: что такое переменная имени ветки?

Вот пример того, почему это важно. Мы используем шаблон gitflow. У нас есть ветви dev, release и master, которые все используются для создания артефактов. Развертывание ветви dev развертывается, другие два - нет. функции, исправления ошибок и исправлений.Эти ветки должны быть построены, но не создавать артефакт.Они должны быть использованы, чтобы сообщить разработчику, если есть проблема с их кодом.Мне нужно знать, какая ветка строится для запуска правильные шаги.

Любая помощь будет принята с благодарностью.

+0

Не могли бы вы обновить правильный ответ теперь, когда он был разрешен для людей, которые приходят сюда с помощью поиска? –

ответ

47

Переменная env.BRANCH_NAME содержит имя ветви.

По Pipeline Groovy Plugin 2.18, вы можете просто использовать BRANCH_NAME (env не требуется, но по-прежнему принимаются.)

+0

Я могу подтвердить, что это работает для нас с использованием плагинов 2.x. – Neil

+0

Не удалось заставить это работать вообще в блоке сценария {} в верхней части шагов {} block. При печати env с помощью echo env.getEnvironment() я обнаружил, что $ {env.BRANCH} доступен и работает! –

+1

Интересно, что ничто из этого не работает для меня.Сбрасывали все под env - не было ни BRANCH, ни BRANCH_NAME. Когда я попытался обратиться к BRANCH_NAME, я получаю «groovy.lang.MissingPropertyException: нет такого свойства: BRANCH_NAME для класса: groovy.lang.Binding» Pipeline Groovy: 2.32, Jenkins 2.32, BitBucket 4.6.2, BitBucket Server Webhook для Jenkins 3.0.1 – Vroomfundel

8

Для этой цели пока нет выделенной переменной ( JENKINS-30252). В то же время вы можете воспользоваться тем, что имя подпроекта берется из имени ветви, и использовать

env.JOB_NAME.replaceFirst('.+/', '') 

Это теперь была решена, см Krzysztof Krasoń's answer.

+1

Спасибо, что заставило меня заострить в правильном направлении. Вот немного больше информации, которая помогла мне получить то, что мне было нужно. https://issues.jenkins-ci.org/browse/JENKINS-30252 - это проблема, связанная с плагином рабочего процесса для этой точной вещи. @ jesse-glick ответил более подробно там. Подводя итог: $ {env.JOB_NAME.replaceFirst ('. + /', '')} Даст вам название ветки. –

+0

Спасибо, включен в ответ. –

+0

Кроме того, сделать его неживым, может быть полезно для тех, кто вставляет слэши в имена своих филиалов. env.JOB_NAME.replaceFirst ('. +? /', '') –

Смежные вопросы