Как разделить конвейеры Jenkins CI и gitlab CI?

#jenkins #gitlab #jenkins-pipeline #gitlab-ci

#дженкинс #gitlab #дженкинс-конвейер #gitlab-ci

Вопрос:

До сих пор я работал только с Jenkins. Мы настроили задание многоотраслевого конвейера для автоматической сборки и тестирования программного обеспечения. Задачи записываются в Groovy и хранятся как Jenkinsfile в корневом каталоге нашего репозитория git.

Недавно мы решили добавить еще один механизм для автоматической генерации документации. Генерация документации (но это может быть любая другая задача) была реализована с использованием GitLab CI.

Оба конвейера практически независимы — и оба запускаются git commit / push. Чего я не понимаю: почему и как выполнение конвейера Jenkins связано с конвейером GitLab CI? На следующем скриншоте появляется новый столбец «Внешний», представляющий задание конвейера Jenkins.

Конвейер GitLab CI все еще работает

На самом деле это не большая проблема. Но поскольку оба конвейера должны быть независимыми — результаты запусков не должны влиять друг на друга. Однако, похоже, что при сбое задания Jenkins, то есть «Внешнего», конвейер GitLab CI также выходит из строя:

Сбой конвейера GitLab CI # 1

Сбой конвейера GitLab CI # 2

Есть ли способ лучше разделить эти конвейеры, т. Е. Позволить им завершиться неудачей или успешно по отдельности?

Ответ №1:

Это связано с тем, что плагин Gitlab Branch Source автоматически уведомляет Gitlab о состоянии конвейера Jenkins. Это позволяет вам видеть результат сборки непосредственно в Gitlab. Если вы хотите иметь только результат конвейера Gitlab CI в Gitlab, вы можете отключить эту функцию :

Дополнительные характеристики:
эти характеристики можно выбрать, выбрав Добавить в разделе Поведение.
[…]
Пропустить уведомления о состоянии конвейера — отключить уведомление сервера GitLab
о состоянии конвейера.
[…]

Итак, в вашей группе Gitlab просто перейдите в меню Настройка> Проекты> Группа Gitlab> Добавить и выберите Пропустить уведомления о состоянии конвейера.

skip_pipeline_status

Ответ №2:

почему и как выполнение конвейера Jenkins связано с конвейером GitLab CI? На следующем скриншоте появляется новый столбец «Внешний», представляющий задание конвейера Jenkins.

Как правило, «Внешние» статусы создаются с помощью API состояния сборки фиксации — Дженкинс использует этот API для сообщения статуса сборки конвейера Jenkins в GitLab CI.

Этот внешний статус для Jenkins отображается в вашем конвейере GitLab, потому что вы настроили свой сервер / проект Jenkins для сообщения статусов сборки в GitLab или настроили интеграцию webhook с Jenkins в GitLab (обратите внимание, что они могут быть установлены на уровне группы или администратором, не обязательно на уровне проекта)

Чтобы удалить это из вашего конвейера, вы должны отключить все существующие конфигурации интеграции и настроить свой проект Jenkins независимо от какой-либо интеграции с GitLab. например, используя git polling для запуска сборок jenkins и удаления любых updateGitlabCommitStatus вызовов в ваших сценариях groovy / этапах сборки.