Подтвердить что ты не робот

Создайте только ветвь Git, которая была нажата

У меня есть работа Jenkins, чтобы построить ветвь master моего репо GitHub. Это срабатывает красиво, когда я нажимаю фиксацию на master, и я очень этому рад.

Я также хотел бы иметь одно задание Jenkins, которое построило бы любую другую ветвь в этом репозитории. То есть всякий раз, когда я нажимаю фиксацию на ветку (это не master), я бы хотел, чтобы это задание Дженкинса создало эту ветвь и только эту ветвь.

Использование плагина GitHub pull-request требует от меня создания запроса на перенос и слияния моего commit с master. Я бы хотел сделать это без необходимости создания запроса на pull и только для создания моего коммита без его слияния с master.

Настройка плагина Git для построения всех ветвей означает, что всякий раз, когда я нажимаю на master, все ветки строятся. Я бы хотел создать только одну ветвь, которая была изменена.

Можно ли это сделать в Дженкинсе?

4b9b3361

Ответ 1

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

Краткий ответ - использовать " Спецификатор ветки". Например, origin/feature**.

Если вы используете GitFlow и все ваши ветки функций названы с именем feature/ префиксом, то это решение.

И если вам интересно, как я это понял?

В настройках репозитория я установил службу "Плагин Github" с помощью перехватчика Jenkins https://<jenkin server>/github-webhook/. Обратите внимание, что, по крайней мере, для меня произошло то, что по какой-то причине после нажатия кнопки "test" сообщение отправляемого содержимого никогда не менялось, чтобы подтвердить его получение/подтверждение или что-либо еще. Может быть, нет ответа. Это сбивает с толку, но все равно...

Я создал новое задание Jenkins и установил спецификатор ветки пустым -which. Затем Jenkins автоматически установил значение **.

Я создал ветку feature/foo и вставил в нее.

  • Сборка 1 была запущена, но на master ветке.
  • Сборка 2 также была feature/foo ветке feature/foo.

Таким образом, кажется, с ** или пустым спецификатором, плагин будет запускать сборки на всех ветках репо, когда есть толчок к любому из них.

Затем я попытался с помощью шаблона refs/heads/feature/foo и внес еще одно изменение в ветку feature/foo.

  • Сборка 3 была feature/foo ветке feature/foo.
  • Никаких других сборок не было.

Вроде нормально, но это слишком жестко. Это заставило бы нас иметь одну работу по сборке для каждой функциональной ветки. Я хотел одну работу по сборке для всех функциональных веток.

Затем я попробовал подстановочный знак с шаблоном refs/heads/feature\*\* и выдвинул изменения в feature/foo.

  • Ни одна сборка не была запущена.

Затем я попробовал ветку спецификатор refs/heads/feature/\*\* и нажал.

  • Не было построено

Затем я увидел, что справка из поля "Specifier" указывает на это в разделе "Подстановочные знаки":

Синтаксис имеет вид: REPOSITORYNAME/BRANCH. Кроме того, BRANCH распознается как сокращение от */BRANCH, * распознается как подстановочный знак, а ** распознается как подстановочный знак, который включает разделитель /. Следовательно, origin/branches* будет соответствовать origin/branches-foo но не origin/branches/foo, тогда как origin/branches** будет соответствовать и origin/branches-foo и origin/branches/foo.

Поэтому я попробовал origin/feature**

  • Сборка 4 была запущена на origin/feature/foo.

Эврика! Кажется, вы не можете использовать подстановочные знаки со ссылками (начиная с refs/), но вы можете использовать с именами фактических ветвей (начиная с origin/).

Затем я создал ветку feature/bar и нажал на нее. Чтобы убедиться, что будет построен только этот, а не другие ветки, также начинающиеся с feature/.

  • Сборка 5 была запущена на origin/feature/bar.

Посмотрел почти там. Просто нужно было еще несколько тестов.

Затем я толкнул еще одно изменение в origin/master

  • Нет сборки уволен. Большой!

Затем я внес еще одно изменение в feature/bar, чтобы проверить, что будет построена только эта ветка. Несмотря на тот факт, что origin/master также были вытеснены.

  • Сборка 6 была запущена на feature/bar.
  • Никаких других сборок не было.

Выглядит хорошо для меня.

Ответ 2

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

https://wiki.jenkins-ci.org/display/JENKINS/Multi-Branch+Project+Plugin

Надеюсь, это поможет.

Ответ 3

Найден там config whitelist, указанный в разделе Build Trigger:

нажмите

whitelist

Там вы можете указать, чтобы построить/проверить, в какую ветвь PR будет объединена.

Ответ 5

Как уже упоминалось @thatway_3, это возможно с помощью плагина. Плагин Multi-Branch Project, с которым они связаны, устарел, но вместо этого вы можете использовать плагин Multiline -Branch of Pipeline.

Если вы установите этот плагин, а затем создадите новое задание типа "Многоотраслевой конвейер", вы можете настроить его для отслеживания определенного репозитория. Затем он (правильно!) Построит все ветки оттуда.

Смотрите также: https://jenkins.io/blog/2015/12/03/pipeline-as-code-with-multibranch-workflows-in-jenkins/

Надеюсь это поможет.

Ответ 6

вы можете легко указать ветку в конфигурации заданий:

в разделе Управление исходными кодами, где вы уже указали свой URL-адрес репозитория git, вы также можете указать ветки для сборки. Просто укажите название своей ветки вместо имени мастера (значение по умолчанию).