Проблема
Мне необходимо реализовать интеграцию Merge Requests из GitLab с билдами Тимсити.
Нужно чтобы:
- при создании MR в GitLab билдился собственно код из Merge Request'а
- При удачном/неудачном билде Teamcity оповещал GitLab и красил кнопочку в зеленый или красный цвет - разрешая или запрещая собственно Merge.
Что я делаю
- VCSRoot в проекте со следующим branchSpecs:
+:refs/(merge-requests/*)/head -:refs/heads/develop
То есть - собираем все ветки MR, но не собираем дефолтную.
- В buildType прописываю параметр, чтобы номер MR был доступен в билде в виде env-переменной со значением merge-requests/X:
param("env.CI_MR_BRANCH", "%teamcity.build.branch%")
- И дальше, сборочный скрипт должен выполнить Approve с помощью https://docs.gitlab.com/ee/api/merge_request_approvals.html#approve-merge-request .
CI_PROJECT_ID=`curl -s -XGET -H "Content-Type: application/json" --header "PRIVATE-TOKEN: $GITLAB_TOKEN" https://gitlab.com/api/v4/projects/<YOUR-NAMESPACE>%2F<YOUR-PROJECT-NAME> | jq '.id'` MERGE_REQUEST_IID=`echo ${CI_MR_BRANCH} | cut -d'/' -f2` curl -f -s -XPOST -H "Content-Type: application/json" --header "PRIVATE-TOKEN: $GITLAB_TOKEN" https://gitlab.example.com/api/v4/projects/${CI_PROJECT_ID}/merge_requests/${MERGE_REQUEST_IID}/approve
Альтернативный вариант - GitLab External Status Check - https://about.gitlab.com/blog/2021/10/04/how-to-status-checks/
Discussion