Ограничьте, какая ветвь построена конвейером Дженкинса?

В настоящее время я настраиваю сервер Jenkins, размещенный в контейнере Docker в AWS.

Я использую BlueOcean для настройки репозитория.

Прямо сейчас конвейер сканирует все ветки в репозитории, чтобы обнаружить Jenkinsfiles, а затем автоматически выполнит сборку на этой ветке, если обнаружит изменения. Я сканирую репозиторий каждые 5 минут, чтобы обнаружить изменения.

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

Итак, мой вопрос: как и где вы настраиваете конвейер Jenkins GitHub для сборки только определенных ветвей, а не для сканирования всех ветвей?


person Peter    schedule 15.10.2018    source источник


Ответы (3)


Многоотраслевая воронка — ваш друг.

Вместо того, чтобы пытаться ограничить, какие ветки Jenkins опрашивает в первую очередь, я делаю в своем Jenkinsfile контроль источника опроса каждую минуту:

triggers { pollSCM('* * * * *') }

Это опросит каждую ветвь и создаст задание, в котором он найдет файл Jenkinsfile в расположении и имени, которые вы указали в конфигурации задания Multibranch Pipeline.

Примечание

О единственной конфигурации в многоветвевом конвейере:

  1. Где репозиторий SCM?
  2. Относительный путь и имя файла Jenkinsfile в рабочей области. (Вы можете называть его Бобом, если хотите)

Многоветвевое задание конвейера задает дополнительную переменную среды: BRANCH_NAME, которая позволяет вам условно выполнять действия в конвейере следующим образом:

script {
    if( "${env.BRANCH_NAME}" == "integration" ) {
        //Do something useful
    }
}

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

person Andrew Gray    schedule 16.10.2018
comment
это прибило это. У меня был дополнительный вопрос, если можно. Я запускаю мастер Jenkins в контейнере, и я могу создавать и запускать отдельные задания в подчиненных контейнерах, но когда я пытаюсь запустить конвейер, используя то же облако докеров, которое я создал, конвейер немедленно падает и состояние line 2: docker: command not found. Любая идея, почему это происходит в конвейере, а не в отдельных заданиях? - person Peter; 16.10.2018
comment
Спасибо, Питер. Я еще не использовал докер. Я бы посоветовал прочитать Jenkins Pipeline о том, как вызывать докер. Помните, что конвейер все еще не полностью функционален по сравнению с фристайлом, хотя он быстро заполняется. - person Andrew Gray; 17.10.2018
comment
Кстати, есть также встроенные условия jenkins.io/doc/book/pipeline /синтаксис/#когда when { branch 'master' } - person Sasha Miroshnychenko; 05.04.2019

Я предполагаю, что вы используете плагин github. Я предлагаю настроить веб-перехватчик в вашем репозитории с помощью универсального подключаемого модуля триггера веб-перехватчика — https://wiki.jenkins.io/display/JENKINS/Generic+Webhook+Trigger+Plugin

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

В нашей настройке мы используем простое задание «процессор триггера веб-перехватчика», который считывает входящий веб-перехватчик из всех репозиториев и запускает нижестоящие конвейеры, используя значения, извлеченные из веб-перехватчика.

person ben5556    schedule 15.10.2018
comment
Я хотел бы узнать больше о том, как вы извлекаете ветку, откуда пришел веб-хук, и строите, только если ветка равна x! Не могли бы вы поделиться этим, пожалуйста? - person Oli; 21.02.2019
comment
О, я сделал это! Я просто изо всех сил пытался интерпретировать документацию. Спасибо за Ваш ответ. Это мне очень помогло. - person Oli; 21.02.2019
comment
Рад, что помогло :) - person ben5556; 21.02.2019
comment
Вам действительно нужно привести пример. В противном случае ваш ответ бесполезен. - person stricq; 13.05.2019

Pipeline принимает входные параметры. Таким образом, вы можете создать параметр с именем ветка.

Внутри вашего конвейера вы можете использовать regex для соответствия только необходимым ветвям.

person JRichardsz    schedule 16.10.2018