Запуск сборки Jenkins для запроса на слияние из веб-хука GitLab
Я хочу, чтобы Jenkins (1.561) создавал запросы на слияние (pull), отправленные в GitLab (6.7.5), инициируемые веб-ловушкой запроса на слияние. У меня есть параметризованная сборка и плагины Jenkins "GitLab Merge Request Builder" (1.2.0) и "GitLab Hook" (1.0.0). Переход на Jenkins CI, к сожалению, не реальный вариант.
Плагин Merge Request Builder может создавать запросы на слияние, если переменные gitlabMergeRequestId
, gitlabTargetBranch
, а также gitlabSourceBranch
доступны. Это хорошо работает, когда плагин опрашивает сам репозиторий, или я запускаю сборку с ручной загрузкой (например, curl --data "gitlabMergeRequestId=3&so_on http://server_name/job/$JOB_NAME/buildWithParameters
), но я не могу сделать это с помощью крючка.
Используя плагин GitLab Hook, я могу получить необходимые данные в полезной нагрузке JSON, но значения имеют "неправильные" ключи:
gitlabMergeRequestId
являетсяid
gitlabTargetBranch
являетсяtarget_branch
gitlabSourceBranch
являетсяsource_branch
Я попытался настроить параметры сборки с помощью требований плагина GitLab Merge Request Builder, как Name
и значения переменных как Default Value
, К сожалению (и, вероятно, намеренно), переменные в Default Value
поля не заменяются, поэтому Jenkins ищет запрос на слияние с идентификатором ${id}
и аналогичные значения ветви.
Я не нашел способа конфигурирования полезной нагрузки, отправляемой из GitLab, и нет никаких опций конфигурации ни для плагина GitLab Hook, ни для имен параметров, используемых плагином GitLab Merge Request Builder.
Я рассматриваю возможность написания небольшого PHP-скрипта для перехвата и изменения полезной нагрузки из POST перед передачей ее Jenkins. Хотя я уверен, что это сработает, это определенно кажется излишне сложным.
Единственный реальный вариант, который я вижу, - это изменить источник плагинов, но это делает их апгрейд PITA.
Я упустил из виду что-то очевидное или действительно нет более простого способа запуска сборок Merge Request с помощью веб-хука от GitLab до Jenkins?
3 ответа
Взгляните на плагин Gitlab Merge Request Builder. Настройте Jenkins From Manage Jenkins и установите URL-адрес gitlab в построителе запроса на слияние. Следуйте инструкциям на https://github.com/timols/jenkins-gitlab-merge-request-builder-plugin 1
Проверьте этот новый плагин (gitlab-plugin), возможно, это поможет. Этот плагин эмулирует Jenkins как веб-сервис GitlabCI для использования с GitlabHQ.
Вы можете использовать Generic Webhook Trigger для Дженкинса. Он может внести любое значение из структуры JSON webhook в сборку.
https://wiki.jenkins.io/display/JENKINS/Generic+Webhook+Trigger+Plugin