Gymterview
middle

Что такое Multibranch Pipeline?

Multibranch Pipeline — это тип проекта в Jenkins, который автоматически обнаруживает ветки в Git-репозитории, содержащие Jenkinsfile, и создаёт для каждой из них отдельный пайплайн.

Представьте многоэтажный паркинг: каждый новый автомобиль (ветка) при въезде автоматически получает выделенное место (Job) с камерой наблюдения (CI-проверки). Когда автомобиль уезжает (ветка удалена) — место освобождается. Не нужно вручную управлять парковочными местами.

Как это работает

  1. Jenkins сканирует репозиторий и находит все ветки, в которых присутствует Jenkinsfile.
  2. Для каждой такой ветки автоматически создаётся отдельная Job.
  3. При появлении новой ветки — создаётся новый Job; при удалении ветки — Job удаляется.
  4. 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.