Проблема

Мне необходимо реализовать интеграцию 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/

Enter your comment. Wiki syntax is allowed:
 
  • devops/teamcity_gitlab_merge_pull_requests.txt
  • Last modified: 2023/09/18 12:39
  • by admin