Ответ 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
. - Никаких других сборок не было.
Выглядит хорошо для меня.