Ответ
Я настраивал такую интеграцию. Основная идея — использовать GitLab Webhooks для триггера сборок и Jenkins Pipeline с параметрами для работы с ветками.
Шаги настройки:
-
Установка плагинов в Jenkins:
GitLab,Pipeline,Git Parameter. -
Создание API-токена в GitLab:
- В GitLab:
Settings->Access Tokens. Создаю токен с правамиapiиread_repository. - Добавляю этот токен в Jenkins как Credentials типа "Secret text".
- В GitLab:
-
Настройка соединения в Jenkins:
Manage Jenkins->Configure System-> секцияGitLab.- Добавляю connection:
GitLab host URLи выбираю созданный токен.
-
Создание 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 .' } } } } -
Настройка 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.
- В репозитории GitLab:
Теперь при каждом пуше в любую ветку или создании MR Jenkins получит webhook и запустит сборку. В логах сборки будет видно, какой коммит или MR её инициировал.