Что такое Multibranch Pipeline?
Multibranch Pipeline — это тип проекта в Jenkins, который автоматически обнаруживает ветки в Git-репозитории, содержащие Jenkinsfile, и создаёт для каждой из них отдельный пайплайн.
Представьте многоэтажный паркинг: каждый новый автомобиль (ветка) при въезде автоматически получает выделенное место (Job) с камерой наблюдения (CI-проверки). Когда автомобиль уезжает (ветка удалена) — место освобождается. Не нужно вручную управлять парковочными местами.
Как это работает
- Jenkins сканирует репозиторий и находит все ветки, в которых присутствует
Jenkinsfile. - Для каждой такой ветки автоматически создаётся отдельная Job.
- При появлении новой ветки — создаётся новый Job; при удалении ветки — Job удаляется.
- Pull Request / Merge Request автоматически получают свой пайплайн, а результат CI отображается в Git-платформе.
Преимущества
- Автоматизация — не нужно вручную создавать Job для каждой ветки.
- Индивидуальные пайплайны — каждая ветка может иметь свой
Jenkinsfile(например, в release-ветке добавлены стадии деплоя). - PR-статусы — статус сборки отображается прямо в Pull Request на GitHub/GitLab/Bitbucket.
- Удобная навигация — Jenkins UI группирует все ветки одного репозитория.
- Автоочистка — удалённые ветки автоматически убираются из Jenkins.
Пример Jenkinsfile для Multibranch Pipeline
Полный пример с условным выполнением стадий по веткам
pipeline {
agent { label 'java17' }
stages {
stage('Build') {
steps { sh 'mvn clean compile' }
}
stage('Test') {
steps { sh 'mvn test' }
}
stage('SonarQube') {
when { anyOf { branch 'main'; branch 'develop' } }
steps { sh 'mvn sonar:sonar' }
}
stage('Deploy to Nexus') {
when { branch 'main' }
steps { sh 'mvn deploy -DskipTests' }
}
stage('Deploy to Dev') {
when { branch 'develop' }
steps { sh './deploy.sh dev' }
}
stage('Deploy to Production') {
when { branch 'main' }
steps {
input message: 'Deploy to production?'
sh './deploy.sh production'
}
}
}
post {
always { junit '**/surefire-reports/*.xml' }
}
}
Полезные переменные окружения
| Переменная | Описание | Пример значения |
|---|---|---|
env.BRANCH_NAME |
Имя текущей ветки | feature/ABC-123 |
env.CHANGE_ID |
Номер Pull Request (если сборка для PR) | 42 |
env.CHANGE_TARGET |
Целевая ветка PR | main |
env.CHANGE_AUTHOR |
Автор PR | ivanov |
Вывод
Multibranch Pipeline — стандартный подход для проектов с активным ветвлением. Он автоматизирует создание и удаление джоб, обеспечивает CI-проверки для каждой ветки и Pull Request, и хорошо сочетается с GitHub Flow и Git Flow.
На собеседовании: часто спрашивают, как Multibranch Pipeline узнаёт о новых ветках. Ответ: Jenkins периодически сканирует репозиторий (по настройке) или получает webhook от Git-сервера. При обнаружении ветки с
Jenkinsfile— автоматически создаётся Job.