Обновление: 2019-03-21
GitLab содержит переменные для информации о запросе на слияние, начиная с версии 11.6 (https://docs.gitlab.com/ce/ci/variables/ см. Переменные, начинающиеся с CI_MERGE_REQUEST_
).Но эти переменные доступны только в merge request pipelines
. (https://docs.gitlab.com/ce/ci/merge_request_pipelines/index.html)
. Чтобы сконфигурировать задание CI для запроса на слияние, мы должны установить only: merge_request
в наших заданиях для запроса на слияниеИ тогда мы можем использовать CI_MERGE_REQUEST_*
переменные в этих заданиях.
Самая большая ошибка здесь - only: merge_request
имеет совершенно другое поведение по сравнению с обычными only/except
параметрами.
обычный only/except
параметры: (https://docs.gitlab.com/ce/ci/yaml/README.html#onlyexcept-basic)
only
определяет имена ветвей и тегов, для которых будет выполняться задание. except
определяетимена веток и тегов, для которых задание не будет запущено.
only: merge_request
: (https://docs.gitlab.com/ce/ci/merge_request_pipelines/index.html#excluding-certain-jobs)
Поведение only: merge_requests
параметр таков, что только задания с этим параметром выполняются в контексте запроса на слияние, другие задания не запускаются.
Мне было трудно реорганизовать задания, чтобы они работали, как раньше, с only: merge_request
существует на любой работе. Таким образом, я все еще использую однострочную строку в своем исходном ответе, чтобы получить информацию MR в работе CI.
Оригинальный ответ:
Нет.
Но у GitLab есть план для этой функции в 2019 году Q2: https://gitlab.com/gitlab-org/gitlab-ce/issues/23902#final-assumptions
В настоящее времяМы можем использовать обходной путь для достижения этой цели.Метод описан в ответе Рековни, и он на самом деле работает.
Есть простая однострочная строка, получающая целевую ветвь MR из текущей ветки:
script: # in any script section of gitlab-ci.yml
- 'CI_TARGET_BRANCH_NAME=$(curl -LsS -H "PRIVATE-TOKEN: $AWESOME_GITLAB_API_TOKEN" "https://my.gitlab-instance.com/api/v4/projects/$CI_PROJECT_ID/merge_requests?source_branch=$CI_COMMIT_REF_NAME" | jq --raw-output ".[0].target_branch")'
Объяснение:
CI_TARGET_BRANCH_NAME
- это новая переменная, в которой хранится разрешенное имя целевой ветви.Определение переменной необязательно для различного использования.
AWESOME_GITLAB_API_TOKEN
- это переменная, сконфигурированная в конфигурации переменных CI / CD хранилища.Это личный токен доступа GitLab (созданный в настройках пользователя) с областью действия api
.
Параметры curl
: -L
позволяет curl знать о перенаправлениях HTTP.-sS
делает скручивание беззвучным (-s
), но показывает (-S
) ошибки.-H
указывает информацию о правах доступа к GitLab API.
Используемый API может быть найден в https://docs.gitlab.com/ce/api/merge_requests.html#list-project-merge-requests. Мы используем атрибут source_branch
, чтобы выяснить, на каком конвейере MR выполняется текущий конвейер.Таким образом, если исходная ветвь имеет несколько MR для разных целевых ветвей, вы можете изменить деталь после |
и выполнить собственную логику.
About jq
(https://stedolan.github.io/jq/), этопростой CLI-утилита для работы с JSON (что возвращает GitLab API). Вы можете использовать node -p
или любой другой метод, который вам нужен.