Как настроить Jenkins для автоматической сборки при создании или обновлении merge request в GitLab, а также для сборки по разным веткам?

«Как настроить Jenkins для автоматической сборки при создании или обновлении merge request в GitLab, а также для сборки по разным веткам?» — вопрос из категории CI/CD, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Я настраивал такую интеграцию. Основная идея — использовать GitLab Webhooks для триггера сборок и Jenkins Pipeline с параметрами для работы с ветками.

Шаги настройки:

  1. Установка плагинов в Jenkins: GitLab, Pipeline, Git Parameter.

  2. Создание API-токена в GitLab:

    • В GitLab: Settings -> Access Tokens. Создаю токен с правами api и read_repository.
    • Добавляю этот токен в Jenkins как Credentials типа "Secret text".
  3. Настройка соединения в Jenkins:

    • Manage Jenkins -> Configure System -> секция GitLab.
    • Добавляю connection: GitLab host URL и выбираю созданный токен.
  4. Создание Pipeline Job с параметром для выбора ветки:

    pipeline {
    agent any
    parameters {
        gitParameter name: 'BRANCH_NAME',
                     type: 'BRANCH',
                     description: 'Выберите ветку для сборки',
                     branchFilter: 'origin/(.*)',
                     defaultValue: 'origin/main',
                     selectedValue: 'TOP',
                     sortMode: 'DESCENDING_SMART'
    }
    triggers {
        gitlab(
            triggerOnPush: true,
            triggerOnMergeRequest: true,
            branchFilterType: 'All',
            secretToken: 'my-shared-secret-token'
        )
    }
    stages {
        stage('Checkout') {
            steps {
                git branch: "${params.BRANCH_NAME}",
                    url: 'git@gitlab.com:mygroup/myrepo.git',
                    credentialsId: 'jenkins-ssh-key'
            }
        }
        stage('Build') {
            steps {
                sh 'docker build -t myapp:$BRANCH_NAME .'
            }
        }
    }
    }
  5. Настройка Webhook в GitLab:

    • В репозитории GitLab: Settings -> Webhooks.
    • URL: https://jenkins.example.com/project/my-pipeline-job
    • Secret Token: тот же my-shared-secret-token.
    • Выбираю события: Push events, Merge request events.

Теперь при каждом пуше в любую ветку или создании MR Jenkins получит webhook и запустит сборку. В логах сборки будет видно, какой коммит или MR её инициировал.