Как создать запрос на слияние в конце успешного конвейера в Gitlab? - PullRequest
0 голосов
/ 29 июня 2018

Я очень новичок в gitlab и gitlab CI, и я установил конвейер, который успешно завершается. Мои главные ветки и ветки разработки защищены, поэтому требуется запрос на слияние, чтобы другой разработчик в группе мог просмотреть код и оставить комментарий перед слиянием. Мне было интересно, можно ли сгенерировать этот запрос на слияние в конце этого конвейера. Есть ли настройка для этого в репозитории gitlab или мне нужно создать скрипт для этого?
Примечание:
Непосредственно перед публикацией я наткнулся на этот раздел документации по gitlab
Я использую gitlab-runner 11.0.0 на Ubuntu 18.04

Ответы [ 3 ]

0 голосов
/ 03 июля 2018

Для того, чтобы удовлетворить мои простые потребности, я просто добавил последний этап в свой конвейер, который по сути выполняет скрипт bash, адаптированный из этого поста .

0 голосов
/ 26 ноября 2018

Еще один подход к этому:

  • не использовать GitLab API
  • получить патч, представленный кодом, проверенным конвейером
  • используйте электронную почту (!), Так как GitLab 11.5 (ноябрь 2018)

Открыть запрос на слияние с патчем по электронной почте

GitLab долгое время поддерживал открытие запроса на слияние по электронной почте, но перед отправкой электронной почты ветвь уже должна существовать на сервере. Теперь вы можете открыть запрос на слияние только с электронной почтой, прикрепив один или несколько файлов исправлений (.patch).

Патч-файлы являются стандартом для совместного использования и передачи изменений между системами. В будущих выпусках GitLab мы будем опираться на этот фундамент для распределенных запросов на слияние , что позволит выполнять запросы на слияние между экземплярами GitLab и другими инструментами хостинга Git.

См. документацию и выпуск .

0 голосов
/ 29 июня 2018

Краткий ответ: Конечно - все возможно. У GitLab отличный API (, включая создание MR ). Но я думаю, что идти по этому пути плохо. Вы должны использовать GitLab, как он разработан. Вы начинаете свой запрос на слияние слишком поздно. Запустите его до того, как вы начнете какую-либо работу, и ваш запрос на слияние останется открытым на всю продолжительность вашего филиала.

Длинный ответ: Это идеальный рабочий процесс GitLab:

  1. Кто-то создает ВЫПУСК против хранилища. Может быть, запрос функции, может быть, настоящая проблема, что угодно - кто-то хочет, чтобы что-то изменилось, так что это «проблема»
  2. Разработчик открывает проблему и нажимает CREATE MERGE REQUEST
    • Этот генерирует запрос на слияние (MR), соответствующую ветвь и связывает его с проблемой
  3. Разработчик работает над веткой, толкая изменения по мере их поступления
  4. Разработчик получает проходящий конвейер и нажимает « Resolve WIP » на этой странице запроса на слияние, когда он готов к тому, чтобы заказчик предварительно просмотрел работу и / или другой разработчик просмотрел код.
  5. Отсюда, чтобы этот рецензент либо щелкнул MERGE , когда завершит рецензирование, или даже лучше, включите ОДОБРЕНИЯ в настройках репозитория и установите людей или группы людей, которым вы хотите отзывы.
  6. Рядом с кнопкой слияния обязательно удалите исходную ветвь (для здравого смысла), и объединенный код автоматически 1045 * закроет проблему - и свяжет все 3 элемента вместе.

Это в корне отошло от того, как работает GitHub (откуда я пришел), когда у вас нет , чтобы рассказать людям, над чем вы работаете.

  • Запросы на извлечение на GitHub создаются, когда работа закончена и вы хотите объединиться с мастером.
  • Запросы на слияние на GitLab создаются, когда работа начинается , и вы хотите рассказать миру, что собираетесь приступить к работе над функцией , Это позволяет людям быстро отключиться, если это не нужно, или предотвращает дублирование усилий нескольких разработчиков.

РЕДАКТИРОВАТЬ: Похоже, вы заинтересованы в использовании API. Существует пакет python, называемый 'python-gitlab', который на самом деле работает прилично http://python -gitlab.readthedocs.io / en / stable / gl_objects / mrs.html

import gitlab
import os

origin = "https://gitlab.example.com"
# Private token is set as an env var
gl = gitlab.Gitlab(origin, private_token, api_version='4')
gl.auth()

def create_merge_request(origin, private_token):
    mr = project.mergerequests.create({'source_branch': 'cool_feature',
                               'target_branch': 'master',
                               'title': 'merge cool feature',
                               'labels': ['label1', 'label2']})
    mr.assignee_id = gl.users.get(2).id # Assign it to coworker

def lookup_last_pipeline(origin, private_token):
    current_pipeline_id = os.environ['CI_PIPELINE_ID']
    pipelines = gl.projects.get(os.environ['CI_PROJECT_ID']).pipelines.list()
    for pipeline in pipelines:
        if pipeline.status == 'success' and pipeline.id == current_pipeline_id:
            create_merge_request()

Это, конечно, пример, вам придется адаптировать его к вашим точным потребностям.

...