Как я могу добавить пользователя в защищенную ветвь?

# #gitlab-api

Вопрос:

Я хотел бы настроить свой проект gitlab таким образом, чтобы каждый сопровождающий мог объединиться (после проверки), но никто не мог продвигаться дальше master ; только бот (для выпуска).

Я использую terraform для настройки своей gitlab с помощью чего-то вроде этого:

 resource "gitlab_branch_protection" "BranchProtect" {
  project            = local.project_id
  branch             = "master"
  push_access_level  = "no one"
  merge_access_level = "maintainer"
}
 

Но у нас есть версия «премиум», и поставщик терраформ не позволяет добавлять пользователя (goto: https://github.com/gitlabhq/terraform-provider-gitlab/issues/165 ).

Итак, что мне нравится делать, так это выполнять некоторый http-запрос в API для добавления конкретного пользователя. Поэтому я делаю это вот так:

  1. получите реальную защиту
  2. удалите фактическую конфигурацию
  3. обновите полученную конфигурацию тем, что я хочу
  4. нажмите на новую конфигурацию

Кстати: Я не нашел, как просто обновить конфигурацию… https://docs.gitlab.com/ee/api/protected_branches.html

 TMP_FILE=$(mktemp)
http GET 
    $GITLAB_URL/api/v4/projects/$pid/protected_branches 
    PRIVATE-TOKEN:$GITLAB_TOKEN 
    name=$BRANCH_NAME 
    | 
    jq 
    --arg uid $USER_ID 
    '.[0] | .push_access_levels |= .   [{user_id: ($uid | tonumber)}]' 
    > $TMP_FILE

http DELETE 
    "$GITLAB_URL/api/v4/projects/$pid/protected_branches/$BRANCH_NAME" 
    PRIVATE-TOKEN:$GITLAB_TOKEN

http --verbose POST 
    "$GITLAB_URL/api/v4/projects/$pid/protected_branches" 
    PRIVATE-TOKEN:$GITLAB_TOKEN 
    < $TMP_FILE
 

Но моя проблема в том, что полученная конфигурация не соответствует моим ожиданиям, у меня есть что-то вроде этого:

     "push_access_levels": [
            {
                "access_level": 40,
                "access_level_description": "Maintainers",
                "group_id": null,
                "user_id": null
            }
        ],
 

Как я могу просто обновить защиту филиала, чтобы добавить простого пользователя ?

Ответ №1:

Хорошо, как они говорят: RTFM !

Но вам нужно удалить правило перед добавлением новой конфигурации.

 http 
    DELETE 
    "$GITLAB_URL/api/v4/projects/$pid/protected_branches/$BRANCH_NAME" 
    PRIVATE-TOKEN:$GITLAB_TOKEN 

http 
    POST 
    $GITLAB_URL/api/v4/projects/$pid/protected_branches 
    PRIVATE-TOKEN:$GITLAB_TOKEN 
    name==${BRANCH_NAME} 
    push_access_level==0 
    merge_access_level==40 
    unprotect_access_level==40 
    allowed_to_push[][user_id]==$USER_ID