Merge Request 승인 API
/approvals엔드포인트를 사용하여 승인 구성을 변경하는 것은 GitLab 12.3에서 deprecated되었습니다.- GitLab 16.0에서
 /approvals엔드포인트가 제거되었습니다.
프로젝트에서 모든 Merge Request에 대한 승인에 대한 구성입니다. 모든 엔드포인트에 대해 인증되어 있어야 합니다.
그룹 수준의 MR 승인
- GitLab 16.7에서 파이어로
 approval_group_rules이름의 플래그와 함께 도입되었습니다. 기본값으로 비활성화되어 있습니다. 이 기능은 Experiment입니다.
Self-managed GitLab에서는 기본적으로 이 기능을 사용할 수 없습니다. 관리자는
approval_group_rules이름의 피처 플래그를 활성화하여 사용할 수 있습니다.GitLab.com 및 GitLab Dedicated에서는 이 기능을 사용할 수 없습니다.
이 기능은 프로덕션 환경에 사용할 준비가 되지 않았습니다.
그룹 승인 규칙은 그룹에 속한 프로젝트의 모든 보호된 브랜치에 적용됩니다. 이 기능은 Experiment입니다.
그룹 수준 승인 규칙 가져오기
- GitLab 16.10에서 도입되었습니다.
 
그룹 관리자는 다음 엔드포인트를 사용하여 그룹의 승인 규칙에 대한 정보를 요청할 수 있습니다:
GET /groups/:id/approval_rules
page 및 per_page 페이지네이션 매개변수를 사용하여 승인 규칙 디렉터리을 제한할 수 있습니다.
지원되는 속성:
| 속성 | 유형 | 필수 | 설명 | 
|---|---|---|---|
id
 | integer or string | Yes | 프로젝트의 ID 또는 URL 인코딩된 경로. | 
예시 요청:
curl --request GET --header "PRIVATE-TOKEN: <your_access_token>" \
  --url "https://gitlab.example.com/api/v4/groups/29/approval_rules"
예시 응답:
[
  {
    "id": 2,
    "name": "rule1",
    "rule_type": "any_approver",
    "eligible_approvers": [],
    "approvals_required": 3,
    "users": [],
    "groups": [],
    "contains_hidden_groups": false,
    "protected_branches": [],
    "applies_to_all_protected_branches": true
  },
  {
    "id": 3,
    "name": "rule2",
    "rule_type": "code_owner",
    "eligible_approvers": [],
    "approvals_required": 2,
    "users": [],
    "groups": [],
    "contains_hidden_groups": false,
    "protected_branches": [],
    "applies_to_all_protected_branches": true
  }
]
그룹 수준의 승인 규칙 생성
그룹 관리자는 다음 엔드포인트를 사용하여 그룹 수준의 승인 규칙을 생성할 수 있습니다:
POST /groups/:id/approval_rules
지원되는 속성:
| 속성 | 유형 | 필수 | 설명 | 
|---|---|---|---|
id
 | integer or string | Yes | 그룹의 ID 또는 URL 인코딩된 경로. | 
approvals_required
 | integer | Yes | 이 규칙에 대한 필요한 승인 수. | 
name
 | string | Yes | 승인 규칙의 이름. | 
group_ids
 | array | No | 승인자로서의 그룹 ID. | 
report_type
 | string | No | 규칙 유형이 report_approver인 경우 필요한 보고서 유형. 지원되는 보고서 유형은 license_scanning (GitLab 15.9에서 deprecate)과 code_coverage입니다.
 | 
rule_type
 | string | No | 규칙의 유형. any_approver는 approvals_required 0으로 사전 구성된 기본 규칙입니다. 다른 규칙은 regular(일반 Merge Request 승인 규칙용) 및 report_approver입니다. report_approver는 구성되고 활성화된 Merge Request 승인 정책에서 자동으로 사용되며 이 API를 사용하여 승인 규칙을 생성하는 데 사용해서는 안 됩니다.
 | 
user_ids
 | array | No | 승인자로서의 사용자 ID. | 
예시 요청:
curl --request POST --header "PRIVATE-TOKEN: <your_access_token>" \
  --url "https://gitlab.example.com/api/v4/groups/29/approval_rules?name=security&approvals_required=2"
예시 응답:
{
  "id": 5,
  "name": "security",
  "rule_type": "any_approver",
  "eligible_approvers": [],
  "approvals_required": 2,
  "users": [],
  "groups": [],
  "contains_hidden_groups": false,
  "protected_branches": [
    {
      "id": 5,
      "name": "master",
      "push_access_levels": [
        {
          "id": 5,
          "access_level": 40,
          "access_level_description": "Maintainers",
          "deploy_key_id": null,
          "user_id": null,
          "group_id": null
        }
      ],
      "merge_access_levels": [
        {
          "id": 5,
          "access_level": 40,
          "access_level_description": "Maintainers",
          "user_id": null,
          "group_id": null
        }
      ],
      "allow_force_push": false,
      "unprotect_access_levels": [],
      "code_owner_approval_required": false,
      "inherited": false
    }
  ],
  "applies_to_all_protected_branches": true
}
그룹 수준 승인 규칙 업데이트
- GitLab 16.10에서 도입되었습니다.
 
그룹 관리자는 다음 엔드포인트를 사용하여 그룹 수준 승인 규칙을 업데이트할 수 있습니다.
PUT /groups/:id/approval_rules/:approval_rule_id
지원되는 속성:
| 속성 | 유형 | 필수 여부 | 설명 | 
|---|---|---|---|
approval_rule_id
 | 정수 | 예 | 승인 규칙의 ID입니다. | 
id
 | 정수 또는 문자열 | 예 | 그룹의 ID 또는 URL 인코딩된 경로입니다. | 
approvals_required
 | 문자열 | 아니오 | 이 규칙에 필요한 승인 수입니다. | 
group_ids
 | 정수 | 아니오 | 결재자로서 사용자의 ID입니다. | 
name
 | 문자열 | 아니오 | 승인 규칙의 이름입니다. | 
rule_type
 | 배열 | 아니오 | 규칙 유형입니다. any_approver는 approvals_required가 0인 미리 구성된 기본 규칙입니다. 다른 규칙은 regular (Merge Request 승인 규칙에 사용) 및 report_approver입니다. report_approver는 구성 및 활성화된 Merge Request 승인 정책에서 승인 규칙이 만들어질 때 자동으로 사용되며, 이 API를 사용하여 승인 규칙을 생성하기 위해 사용해서는 안 됩니다.
 | 
user_ids
 | 배열 | 아니오 | 결재자로서 그룹의 ID입니다. | 
예시 요청:
curl --request PUT --header "PRIVATE-TOKEN: <your_access_token>" \
  --url "https://gitlab.example.com/api/v4/groups/29/approval_rules/5?name=security2&approvals_required=1"
예시 응답:
{
  "id": 5,
  "name": "security2",
  "rule_type": "any_approver",
  "eligible_approvers": [],
  "approvals_required": 1,
  "users": [],
  "groups": [],
  "contains_hidden_groups": false,
  "protected_branches": [
    {
      "id": 5,
      "name": "master",
      "push_access_levels": [
        {
          "id": 5,
          "access_level": 40,
          "access_level_description": "Maintainers",
          "deploy_key_id": null,
          "user_id": null,
          "group_id": null
        }
      ],
      "merge_access_levels": [
        {
          "id": 5,
          "access_level": 40,
          "access_level_description": "Maintainers",
          "user_id": null,
          "group_id": null
        }
      ],
      "allow_force_push": false,
      "unprotect_access_levels": [],
      "code_owner_approval_required": false,
      "inherited": false
    }
  ],
  "applies_to_all_protected_branches": true
}
프로젝트 수준 MR 승인
구성 가져오기
- GitLab 13.9에서 GitLab Premium으로 이동했습니다.
 approvers및approver_groups필드는 GitLab 12.3에서 지원이 중단되었으며 항상 비어 있습니다. 이 정보에 액세스하려면 프로젝트 수준 승인 규칙을 사용하십시오.
다음 엔드포인트를 사용하여 프로젝트의 승인 구성에 대한 정보를 요청할 수 있습니다.
GET /projects/:id/approvals
지원되는 속성:
| 속성 | 유형 | 필수 여부 | 설명 | 
|---|---|---|---|
id
 | 정수 또는 문자열 | 예 | 프로젝트의 ID 또는 URL 인코딩된 경로. | 
{
  "approvers": [], // GitLab 12.3에서 사용 중단되었으며 항상 비어 있음
  "approver_groups": [], // GitLab 12.3에서 사용 중단되었으며 항상 비어 있음
  "approvals_before_merge": 2, // GitLab 12.3에서 사용 중단되었으며 대신 승인 규칙을 사용하십시오
  "reset_approvals_on_push": true,
  "selective_code_owner_removals": false,
  "disable_overriding_approvers_per_merge_request": false,
  "merge_requests_author_approval": true,
  "merge_requests_disable_committers_approval": false,
  "require_password_to_approve": true
}
구성 변경
- GitLab 13.9에서 GitLab Premium으로 이동했습니다.
 
허용되는 경우 다음 엔드포인트를 사용하여 승인 구성을 변경할 수 있습니다.
POST /projects/:id/approvals
지원되는 속성:
| 속성 | 유형 | 필수 여부 | 설명 | 
|---|---|---|---|
id
 | 정수 또는 문자열 | 예 | 프로젝트의 ID 또는 URL 인코딩된 경로. | 
approvals_before_merge (deprecated)
 | 정수 | 아니오 | Merge Request이 Merge되기 전에 필요한 승인 수입니다. GitLab 12.3에서 사용 중단되었습니다. 대신 승인 규칙을 사용하십시오. | 
disable_overriding_approvers_per_merge_request
 | 부울 | 아니오 | Merge Request당 결재자를 무시하거나 허용합니다. | 
merge_requests_author_approval
 | 부울 | 아니오 | 작성자가 스스로 Merge Request을 승인할 수 있게 하거나 금지합니다. true는 작성자가 자체 승인할 수 있음을 의미합니다.
 | 
merge_requests_disable_committers_approval
 | 부울 | 아니오 | 커미터가 스스로 Merge Request을 승인하도록 허용하거나 금지합니다. | 
require_password_to_approve
 | 부울 | 아니오 | 승인자가 승인을 추가하기 전에 인증을 위해 비밀번호를 입력해야 하는지 여부를 지정합니다. | 
reset_approvals_on_push
 | 부울 | 아니오 | 새로운 푸시에서 승인을 재설정합니다. | 
selective_code_owner_removals
 | 부울 | 아니오 | 코드 소유자의 승인을 재설정하려면 파일이 변경된 경우에만 사용합니다. reset_approvals_on_push가 비활성화된 경우에만 활성화할 수 있습니다.
 | 
{
  "approvals_before_merge": 2, // GitLab 12.3에서 사용 중단되었으며 대신 승인 규칙을 사용하십시오
  "reset_approvals_on_push": true,
  "selective_code_owner_removals": false,
  "disable_overriding_approvers_per_merge_request": false,
  "merge_requests_author_approval": false,
  "merge_requests_disable_committers_approval": false,
  "require_password_to_approve": true
}
프로젝트 수준 규칙 가져오기
- 13.9에서 GitLab Premium으로 이전되었습니다.
 - GitLab 15.3에서 페이지네이션 지원이 도입되었습니다. 플래그
 approval_rules_pagination로 제공됩니다. 기본적으로 활성화됩니다.- GitLab 15.3에서
 applies_to_all_protected_branches속성이 도입되었습니다.- GitLab 15.7에서 페이지네이션 지원이 일반적으로 사용 가능하게 되었습니다. 피처 플래그
 approval_rules_pagination가 제거되었습니다.- GitLab 15.8에서
 usernames속성이 도입되었습니다.
다음 엔드포인트를 사용하여 프로젝트의 승인 규칙에 관한 정보를 요청할 수 있습니다.
GET /projects/:id/approval_rules
page 및 per_page 페이지네이션 매개 변수를 사용하여 승인 규칙 디렉터리을 제한할 수 있습니다.
지원되는 속성:
| 속성 | 유형 | 필수 여부 | 설명 | 
|---|---|---|---|
id
 | 정수 또는 문자열 | 예 | 프로젝트의 ID 또는 URL로 인코딩된 경로입니다. | 
[
  {
    "id": 1,
    "name": "security",
    "rule_type": "regular",
    "eligible_approvers": [
      {
        "id": 5,
        "name": "John Doe",
        "username": "jdoe",
        "state": "active",
        "avatar_url": "https://www.gravatar.com/avatar/0?s=80&d=identicon",
        "web_url": "http://localhost/jdoe"
      },
      {
        "id": 50,
        "name": "Group Member 1",
        "username": "group_member_1",
        "state": "active",
        "avatar_url": "https://www.gravatar.com/avatar/0?s=80&d=identicon",
        "web_url": "http://localhost/group_member_1"
      }
    ],
    "approvals_required": 3,
    "users": [
      {
        "id": 5,
        "name": "John Doe",
        "username": "jdoe",
        "state": "active",
        "avatar_url": "https://www.gravatar.com/avatar/0?s=80&d=identicon",
        "web_url": "http://localhost/jdoe"
      }
    ],
    "groups": [
      {
        "id": 5,
        "name": "group1",
        "path": "group1",
        "description": "",
        "visibility": "public",
        "lfs_enabled": false,
        "avatar_url": null,
        "web_url": "http://localhost/groups/group1",
        "request_access_enabled": false,
        "full_name": "group1",
        "full_path": "group1",
        "parent_id": null,
        "ldap_cn": null,
        "ldap_access": null
      }
    ],
    "applies_to_all_protected_branches": false,
    "protected_branches": [
      {
        "id": 1,
        "name": "main",
        "push_access_levels": [
          {
            "access_level": 30,
            "access_level_description": "Developers + Maintainers"
          }
        ],
        "merge_access_levels": [
          {
            "access_level": 30,
            "access_level_description": "Developers + Maintainers"
          }
        ],
        "unprotect_access_levels": [
          {
            "access_level": 40,
            "access_level_description": "Maintainers"
          }
        ],
        "code_owner_approval_required": "false"
      }
    ],
    "contains_hidden_groups": false
  }
]
단일 프로젝트 수준 규칙 가져오기
다음 엔드포인트를 사용하여 단일 프로젝트 승인 규칙에 관한 정보를 요청할 수 있습니다.
GET /projects/:id/approval_rules/:approval_rule_id
지원되는 속성:
| 속성 | 유형 | 필수 여부 | 설명 | 
|---|---|---|---|
id
 | 정수 또는 문자열 | 예 | 프로젝트의 ID 또는 URL로 인코딩된 경로입니다. | 
approval_rule_id
 | 정수 | 예 | 승인 규칙의 ID입니다. | 
{
  "id": 1,
  "name": "security",
  "rule_type": "regular",
  "eligible_approvers": [
    {
      "id": 5,
      "name": "John Doe",
      "username": "jdoe",
      "state": "active",
      "avatar_url": "https://www.gravatar.com/avatar/0?s=80&d=identicon",
      "web_url": "http://localhost/jdoe"
    },
    {
      "id": 50,
      "name": "Group Member 1",
      "username": "group_member_1",
      "state": "active",
      "avatar_url": "https://www.gravatar.com/avatar/0?s=80&d=identicon",
      "web_url": "http://localhost/group_member_1"
    }
  ],
  "approvals_required": 3,
  "users": [
    {
      "id": 5,
      "name": "John Doe",
      "username": "jdoe",
      "state": "active",
      "avatar_url": "https://www.gravatar.com/avatar/0?s=80&d=identicon",
      "web_url": "http://localhost/jdoe"
    }
  ],
  "groups": [
    {
      "id": 5,
      "name": "group1",
      "path": "group1",
      "description": "",
      "visibility": "public",
      "lfs_enabled": false,
      "avatar_url": null,
      "web_url": "http://localhost/groups/group1",
      "request_access_enabled": false,
      "full_name": "group1",
      "full_path": "group1",
      "parent_id": null,
      "ldap_cn": null,
      "ldap_access": null
    }
  ],
  "applies_to_all_protected_branches": false,
  "protected_branches": [
    {
      "id": 1,
      "name": "main",
      "push_access_levels": [
        {
          "access_level": 30,
          "access_level_description": "Developers + Maintainers"
        }
      ],
      "merge_access_levels": [
        {
          "access_level": 30,
          "access_level_description": "Developers + Maintainers"
        }
      ],
      "unprotect_access_levels": [
        {
          "access_level": 40,
          "access_level_description": "Maintainers"
        }
      ],
      "code_owner_approval_required": "false"
    }
  ],
  "contains_hidden_groups": false
}
프로젝트 레벨 규칙 생성
다음 엔드포인트를 사용하여 프로젝트 승인 규칙을 생성할 수 있습니다:
POST /projects/:id/approval_rules
지원되는 속성:
| 속성 | 유형 | 필수 여부 | 설명 | 
|---|---|---|---|
id
 | 정수 또는 문자열 | 예 | 프로젝트의 ID 또는 URL 인코딩된 경로. | 
approvals_required
 | 정수 | 예 | 이 규칙에 필요한 승인 수입니다. | 
name
 | 문자열 | 예 | 승인 규칙의 이름입니다. | 
applies_to_all_protected_branches
 | 부울 | 아니요 | 규칙이 모든 보호된 브랜치에 적용되는지 여부입니다. true로 설정하면 protected_branch_ids의 값은 무시됩니다. 기본값은 false입니다. GitLab 15.3에서 도입되었습니다.
 | 
group_ids
 | 배열 | 아니요 | 승인자로서 그룹의 ID들입니다. | 
protected_branch_ids
 | 배열 | 아니요 | 규칙을 범위로 지정할 보호된 브랜치의 ID들입니다. ID를 식별하려면 API를 사용하세요. | 
report_type
 | 문자열 | 아니요 | 규칙 유형이 report_approver인 경우 필요한 보고서 유형입니다. 지원되는 보고서 유형은 license_scanning (GitLab 15.9에서 Deprecated) 및 code_coverage입니다.
 | 
rule_type
 | 문자열 | 아니요 | 규칙의 유형입니다. any_approver는 approvals_required가 0인 사전 구성된 기본 규칙입니다. 다른 규칙은 regular(일반적인 Merge Request 승인 규칙에 사용) 및 report_approver입니다. report_approver는 구성되어 활성화된 Merge Request 승인 정책에서 자동으로 사용되며 이 API로 승인 규칙을 생성하는 데 사용해서는 안 됩니다.
 | 
user_ids
 | 배열 | 아니요 | 승인자로서 사용자의 ID들입니다. user_ids와 usernames 둘 다 제공하면 사용자 디렉터리이 추가됩니다.
 | 
usernames
 | 문자열 배열 | 아니요 | 이 규칙의 승인자들의 사용자 이름입니다(user_ids와 동일하지만 사용자 이름의 디렉터리이 필요합니다). user_ids와 usernames를 둘 다 제공하면 사용자 디렉터리이 추가됩니다.
 | 
{
  "id": 1,
  "name": "security",
  "rule_type": "regular",
  "eligible_approvers": [
    {
      "id": 2,
      "name": "John Doe",
      "username": "jdoe",
      "state": "active",
      "avatar_url": "https://www.gravatar.com/avatar/0?s=80&d=identicon",
      "web_url": "http://localhost/jdoe"
    },
    {
      "id": 50,
      "name": "Group Member 1",
      "username": "group_member_1",
      "state": "active",
      "avatar_url": "https://www.gravatar.com/avatar/0?s=80&d=identicon",
      "web_url": "http://localhost/group_member_1"
    }
  ],
  "approvals_required": 1,
  "users": [
    {
      "id": 2,
      "name": "John Doe",
      "username": "jdoe",
      "state": "active",
      "avatar_url": "https://www.gravatar.com/avatar/0?s=80&d=identicon",
      "web_url": "http://localhost/jdoe"
    }
  ],
  "groups": [
    {
      "id": 5,
      "name": "group1",
      "path": "group1",
      "description": "",
      "visibility": "public",
      "lfs_enabled": false,
      "avatar_url": null,
      "web_url": "http://localhost/groups/group1",
      "request_access_enabled": false,
      "full_name": "group1",
      "full_path": "group1",
      "parent_id": null,
      "ldap_cn": null,
      "ldap_access": null
    }
  ],
  "applies_to_all_protected_branches": false,
  "protected_branches": [
    {
      "id": 1,
      "name": "main",
      "push_access_levels": [
        {
          "access_level": 30,
          "access_level_description": "Developers + Maintainers"
        }
      ],
      "merge_access_levels": [
        {
          "access_level": 30,
          "access_level_description": "Developers + Maintainers"
        }
      ],
      "unprotect_access_levels": [
        {
          "access_level": 40,
          "access_level_description": "Maintainers"
        }
      ],
      "code_owner_approval_required": "false"
    }
  ],
  "contains_hidden_groups": false
}
다음과 같이 기본으로 설정된 0 개 필수 승인자 수를 증가시킬 수 있습니다:
curl --request POST --header "PRIVATE-TOKEN: <your_access_token>" \
  --header 'Content-Type: application/json' \
  --data '{"name": "임의의 이름", "rule_type": "any_approver", "approvals_required": 2}'
또 다른 예는 추가로, 사용자별 규칙을 생성하는 것입니다:
curl --request POST --header "PRIVATE-TOKEN: <your_access_token>" \
  --header 'Content-Type: application/json' \
  --data '{"name": "규칙 이름", "approvals_required": 3, "user_ids": [123, 456, 789]}' \
  https://gitlab.example.com/api/v4/projects/<project_id>/approval_rules
프로젝트 수준 규칙 업데이트
다음 엔드포인트를 사용하여 프로젝트 승인 규칙을 업데이트할 수 있습니다.
PUT /projects/:id/approval_rules/:approval_rule_id
remove_hidden_groups 매개변수가 true인 경우에만 제거됩니다. 이렇게 하면 사용자가 승인 규칙을 업데이트할 때 실수로 숨겨진 그룹이 제거되지 않도록 보장됩니다.지원되는 속성:
| 속성 | 유형 | 필수 여부 | 설명 |
|————————————-|——————-|————————|———————————————————————————————————————————————————————————————————————————|
| id | 정수 또는 문자열 | 예 | 프로젝트의 ID 또는 URL 인코딩된 경로. |
| approvals_requi_ | 정수 | 예 | 이 규칙에 대한 필요한 승인 수. |
| approval_rule_id | 정수 | 예 | 승인 규칙의 ID. |
| name | 문자열 | 예 | 승인 규칙의 이름. |
| applies_to_all_protected_branches | 부울 | 아니요 | 이 규칙이 모든 보호된 브랜치에 적용되는지 여부. true로 설정된 경우 protected_branch_ids의 값은 무시됩니다. 기본값은 false입니다. [GitLab 15.3](https://gitlab.com/gitlab-org/gitlab/-/issues/335316)에서 도입되었습니다. |
| group_ids | 배열 | 아니요 | 승인자로서 그룹의 ID. |
| protected_branch_ids | 배열 | 아니요 | 규칙의 범위를 지정하는 보호된 브랜치의 ID. ID를 식별하려면 [API를 사용](protected_branches.md#list-protected-branches)합니다. |
| remove_hidden_groups | 부울 | 아니요 | 숨겨진 그룹을 승인 규칙에서 제거해야 하는지 여부. |
| user_ids | 배열 | 아니요 | 승인자로서 사용자의 ID. user_ids와 usernames의 두 가지 디렉터리을 모두 제공하는 경우 두 디렉터리의 사용자가 추가됩니다. |
| usernames | 문자열 배열 | 아니요 | 이 규칙의 승인자의 사용자 이름(이미 user_ids는 있지만 사용자 이름 디렉터리이 필요합니다). user_ids와 usernames`를 둘 다 제공하는 경우 두 디렉터리의 사용자가 추가됩니다.|
{
  "id": 1,
  "name": "security",
  "rule_type": "regular",
  "eligible_approvers": [
    {
      "id": 2,
      "name": "John Doe",
      "username": "jdoe",
      "state": "active",
      "avatar_url": "https://www.gravatar.com/avatar/0?s=80&d=identicon",
      "web_url": "http://localhost/jdoe"
    },
    {
      "id": 50,
      "name": "Group Member 1",
      "username": "group_member_1",
      "state": "active",
      "avatar_url": "https://www.gravatar.com/avatar/0?s=80&d=identicon",
      "web_url": "http://localhost/group_member_1"
    }
  ],
  "approvals_required": 1,
  "users": [
    {
      "id": 2,
      "name": "John Doe",
      "username": "jdoe",
      "state": "active",
      "avatar_url": "https://www.gravatar.com/avatar/0?s=80&d=identicon",
      "web_url": "http://localhost/jdoe"
    }
  ],
  "groups": [
    {
      "id": 5,
      "name": "group1",
      "path": "group1",
      "description": "",
      "visibility": "public",
      "lfs_enabled": false,
      "avatar_url": null,
      "web_url": "http://localhost/groups/group1",
      "request_access_enabled": false,
      "full_name": "group1",
      "full_path": "group1",
      "parent_id": null,
      "ldap_cn": null,
      "ldap_access": null
    }
  ],
  "applies_to_all_protected_branches": false,
  "protected_branches": [
    {
      "id": 1,
      "name": "main",
      "push_access_levels": [
        {
          "access_level": 30,
          "access_level_description": "Developers + Maintainers"
        }
      ],
      "merge_access_levels": [
        {
          "access_level": 30,
          "access_level_description": "Developers + Maintainers"
        }
      ],
      "unprotect_access_levels": [
        {
          "access_level": 40,
          "access_level_description": "Maintainers"
        }
      ],
      "code_owner_approval_required": "false"
    }
  ],
  "contains_hidden_groups": false
}
프로젝트 수준 규칙 삭제
- 13.9에서 GitLab Premium으로 이동되었습니다.
 
다음 엔드포인트를 사용하여 프로젝트 승인 규칙을 삭제할 수 있습니다.
DELETE /projects/:id/approval_rules/:approval_rule_id
지원되는 속성:
| 속성 | 유형 | 필수 여부 | 설명 | 
|---|---|---|---|
id
 | 정수 또는 문자열 | 예 | 프로젝트의 ID 또는 URL 인코딩된 경로. | 
approval_rule_id
 | 정수 | 예 | 승인 규칙의 ID. | 
Merge Request 수준 MR 승인
특정 Merge Request에 대한 승인 구성. 모든 엔드포인트에 대해 인증되어 있어야 합니다.
구성 가져오기
- 13.9에서 GitLab Premium으로 이동되었습니다.
 
다음 엔드포인트를 사용하여 Merge Request의 승인 상태에 대한 정보를 요청할 수 있습니다.
GET /projects/:id/merge_requests/:merge_request_iid/approvals
지원되는 속성:
| 속성 | 유형 | 필수 | 설명 | 
|---|---|---|---|
id
 | 정수 또는 문자열 | 예 | 프로젝트의 ID 또는 URL 인코딩된 경로. | 
merge_request_iid
 | 정수 | 예 | Merge Request의 IID. | 
{
  "id": 5,
  "iid": 5,
  "project_id": 1,
  "title": "Approvals API",
  "description": "Test",
  "state": "opened",
  "created_at": "2016-06-08T00:19:52.638Z",
  "updated_at": "2016-06-08T21:20:42.470Z",
  "merge_status": "cannot_be_merged",
  "approvals_required": 2,
  "approvals_left": 1,
  "approved_by": [
    {
      "user": {
        "name": "Administrator",
        "username": "root",
        "id": 1,
        "state": "active",
        "avatar_url": "http://www.gravatar.com/avatar/e64c7d89f26bd1972efa854d13d7dd61?s=80\u0026d=identicon",
        "web_url": "http://localhost:3000/root"
      }
    }
  ]
}
Merge Request 승인 상태 가져오기
- 13.9에서 GitLab Premium으로 이동되었습니다.
 
다음 엔드포인트를 사용하여 Merge Request의 승인 상태에 대한 정보를 요청할 수 있습니다.
GET /projects/:id/merge_requests/:merge_request_iid/approval_state
approval_rules_overwritten는 Merge Request 수준 규칙이 생성된 경우 true입니다. 그렇지 않으면 false입니다.
이것은 이미 승인된 사용자(approved_by) 및 규칙이 이미 승인되었는지(approved)에 대한 추가 정보를 포함합니다.
지원되는 속성:
| 속성 | 유형 | 필수 | 설명 | 
|---|---|---|---|
id
 | 정수 또는 문자열 | 예 | 프로젝트의 ID 또는 URL 인코딩된 경로. | 
merge_request_iid
 | 정수 | 예 | Merge Request의 IID. | 
{
  "approval_rules_overwritten": true,
  "rules": [
    {
      "id": 1,
      "name": "Ruby",
      "rule_type": "regular",
      "eligible_approvers": [
        {
          "id": 4,
          "name": "John Doe",
          "username": "jdoe",
          "state": "active",
          "avatar_url": "https://www.gravatar.com/avatar/0?s=80&d=identicon",
          "web_url": "http://localhost/jdoe"
        }
      ],
      "approvals_required": 2,
      "users": [
        {
          "id": 4,
          "name": "John Doe",
          "username": "jdoe",
          "state": "active",
          "avatar_url": "https://www.gravatar.com/avatar/0?s=80&d=identicon",
          "web_url": "http://localhost/jdoe"
        }
      ],
      "groups": [],
      "contains_hidden_groups": false,
      "approved_by": [
        {
          "id": 4,
          "name": "John Doe",
          "username": "jdoe",
          "state": "active",
          "avatar_url": "https://www.gravatar.com/avatar/0?s=80&d=identicon",
          "web_url": "http://localhost/jdoe"
        }
      ],
      "source_rule": null,
      "approved": true,
      "overridden": false
    }
  ]
}
Merge Request 수준 규칙 가져오기
- 13.9에서 GitLab Premium으로 이동되었습니다.
 - 페이지네이션 지원은 GitLab 15.3에서 도입되었습니다.
 approval_rules_pagination이라는 플래그로 활성화됨(기본적으로 활성화됨).- 페이지네이션 지원은 GitLab 15.7에서 일반적으로 사용 가능합니다. 피처 플래그
 approval_rules_pagination가 제거되었습니다.
다음 엔드포인트를 사용하여 Merge Request의 승인 규칙에 대한 정보를 요청할 수 있습니다.
GET /projects/:id/merge_requests/:merge_request_iid/approval_rules
page 및 per_page 페이지네이션 매개변수를 사용하여 승인 규칙 디렉터리을 제한할 수 있습니다.
지원되는 속성:
| 속성 | 유형 | 필수 | 설명 | 
|---|---|---|---|
id
 | 정수 또는 문자열 | 예 | 프로젝트의 ID 또는 URL 인코딩된 경로. | 
merge_request_iid
 | 정수 | 예 | Merge Request의 IID. | 
[
  {
    "id": 1,
    "name": "security",
    "rule_type": "regular",
    "eligible_approvers": [
      {
        "id": 5,
        "name": "John Doe",
        "username": "jdoe",
        "state": "active",
        "avatar_url": "https://www.gravatar.com/avatar/0?s=80&d=identicon",
        "web_url": "http://localhost/jdoe"
      },
      {
        "id": 50,
        "name": "Group Member 1",
        "username": "group_member_1",
        "state": "active",
        "avatar_url": "https://www.gravatar.com/avatar/0?s=80&d=identicon",
        "web_url": "http://localhost/group_member_1"
      }
    ],
    "approvals_required": 3,
    "source_rule": null,
    "users": [
      {
        "id": 5,
        "name": "John Doe",
        "username": "jdoe",
        "state": "active",
        "avatar_url": "https://www.gravatar.com/avatar/0?s=80&d=identicon",
        "web_url": "http://localhost/jdoe"
      }
    ],
    "groups": [
      {
        "id": 5,
        "name": "group1",
        "path": "group1",
        "description": "",
        "visibility": "public",
        "lfs_enabled": false,
        "avatar_url": null,
        "web_url": "http://localhost/groups/group1",
        "request_access_enabled": false,
        "full_name": "group1",
        "full_path": "group1",
        "parent_id": null,
        "ldap_cn": null,
        "ldap_access": null
      }
    ],
    "contains_hidden_groups": false,
    "overridden": false
  }
]
단일 Merge Request 수준 규칙 가져오기
다음 엔드포인트를 사용하여 단일 Merge Request 승인 규칙에 대한 정보를 요청할 수 있습니다.
GET /projects/:id/merge_requests/:merge_request_iid/approval_rules/:approval_rule_id
지원되는 속성:
| 속성 | 유형 | 필수 | 설명 | 
|---|---|---|---|
id
 | 정수 또는 문자열 | 예 | 프로젝트의 ID 또는 URL 인코딩 된 경로. | 
approval_rule_id
 | 정수 | 예 | 승인 규칙의 ID. | 
merge_request_iid
 | 정수 | 예 | Merge Request의 IID. | 
{
  "id": 1,
  "name": "security",
  "rule_type": "regular",
  "eligible_approvers": [
    {
      "id": 5,
      "name": "John Doe",
      "username": "jdoe",
      "state": "active",
      "avatar_url": "https://www.gravatar.com/avatar/0?s=80&d=identicon",
      "web_url": "http://localhost/jdoe"
    },
    {
      "id": 50,
      "name": "Group Member 1",
      "username": "group_member_1",
      "state": "active",
      "avatar_url": "https://www.gravatar.com/avatar/0?s=80&d=identicon",
      "web_url": "http://localhost/group_member_1"
    }
  ],
  "approvals_required": 3,
  "source_rule": null,
  "users": [
    {
      "id": 5,
      "name": "John Doe",
      "username": "jdoe",
      "state": "active",
      "avatar_url": "https://www.gravatar.com/avatar/0?s=80&d=identicon",
      "web_url": "http://localhost/jdoe"
    }
  ],
  "groups": [
    {
      "id": 5,
      "name": "group1",
      "path": "group1",
      "description": "",
      "visibility": "public",
      "lfs_enabled": false,
      "avatar_url": null,
      "web_url": "http://localhost/groups/group1",
      "request_access_enabled": false,
      "full_name": "group1",
      "full_path": "group1",
      "parent_id": null,
      "ldap_cn": null,
      "ldap_access": null
    }
  ],
  "contains_hidden_groups": false,
  "overridden": false
}
Merge Request 수준 규칙 생성
- 13.9에서 GitLab Premium으로 이동함.
 
다음 엔드포인트를 사용하여 Merge Request 승인 규칙을 만들 수 있습니다.
POST /projects/:id/merge_requests/:merge_request_iid/approval_rules
지원되는 속성:
| 속성 | 유형 | 필수 | 설명 | 
|---|---|---|---|
id
 | 정수 또는 문자열 | 예 | 프로젝트의 ID 또는 URL 인코딩 된 경로 | 
approvals_required
 | 정수 | 예 | 이 규칙에 필요한 승인 수. | 
merge_request_iid
 | 정수 | 예 | Merge Request의 IID. | 
name
 | 문자열 | 예 | 승인 규칙의 이름. | 
approval_project_rule_id
 | 정수 | 아니오 | 프로젝트 수준 승인 규칙의 ID. | 
group_ids
 | 배열 | 아니오 | 승인자로서 그룹의 ID. | 
user_ids
 | 배열 | 아니오 | 승인자로서 사용자의 ID. user_ids와 usernames를 둘 다 제공하면 두 사용자 디렉터리이 추가됩니다.
 | 
usernames
 | 문자열 배열 | 아니오 | 이 규칙에 대한 승인자의 사용자 이름 (user_ids와 동일하지만 사용자 이름 디렉터리이 필요함). user_ids와 usernames를 둘 다 제공하면 두 사용자 디렉터리이 추가됩니다.
 | 
중요: approval_project_rule_id가 설정되면 프로젝트 수준 규칙의 name, users, groups가 복사됩니다. 지정된 approvals_required가 사용됩니다.
{
  "id": 1,
  "name": "security",
  "rule_type": "regular",
  "eligible_approvers": [
    {
      "id": 2,
      "name": "John Doe",
      "username": "jdoe",
      "state": "active",
      "avatar_url": "https://www.gravatar.com/avatar/0?s=80&d=identicon",
      "web_url": "http://localhost/jdoe"
    },
    {
      "id": 50,
      "name": "Group Member 1",
      "username": "group_member_1",
      "state": "active",
      "avatar_url": "https://www.gravatar.com/avatar/0?s=80&d=identicon",
      "web_url": "http://localhost/group_member_1"
    }
  ],
  "approvals_required": 1,
  "source_rule": null,
  "users": [
    {
      "id": 2,
      "name": "John Doe",
      "username": "jdoe",
      "state": "active",
      "avatar_url": "https://www.gravatar.com/avatar/0?s=80&d=identicon",
      "web_url": "http://localhost/jdoe"
    }
  ],
  "groups": [
    {
      "id": 5,
      "name": "group1",
      "path": "group1",
      "description": "",
      "visibility": "public",
      "lfs_enabled": false,
      "avatar_url": null,
      "web_url": "http://localhost/groups/group1",
      "request_access_enabled": false,
      "full_name": "group1",
      "full_path": "group1",
      "parent_id": null,
      "ldap_cn": null,
      "ldap_access": null
    }
  ],
  "contains_hidden_groups": false,
  "overridden": false
}
머지 요청 레벨 규칙 업데이트
- 13.9에 GitLab Premium으로 이동되었습니다.
 
다음 엔드포인트를 사용하여 머지 요청 승인 규칙을 업데이트할 수 있습니다.
PUT /projects/:id/merge_requests/:merge_request_iid/approval_rules/:approval_rule_id
중요: users/groups 매개변수에 포함되어 있지 않은 승인자 및 그룹은 제거됩니다.
중요: report_approver 또는 code_owner 규칙을 업데이트하는 것은 허용되지 않습니다.
이러한 규칙은 시스템에서 생성됩니다.
지원되는 속성:
| 속성 | 유형 | 필수여부 | 설명 | 
|---|---|---|---|
id
 | integer 또는 string | Yes | 프로젝트의 ID 또는 URL-encoded path. | 
approval_rule_id
 | integer | Yes | 승인 규칙의 ID. | 
merge_request_iid
 | integer | Yes | 머지 요청의 IID. | 
approvals_required
 | integer | No | 이 규칙에 대한 필요한 승인 수. | 
group_ids
 | 배열 | No | 승인자로서 그룹의 ID. | 
name
 | 문자열 | No | 승인 규칙의 이름. | 
remove_hidden_groups
 | 부울 | No | 숨겨진 그룹이 제거되어야 하는지 여부. | 
user_ids
 | 배열 | No | 승인자로서 사용자의 ID. 만약 user_ids와 usernames를 둘 다 제공했다면, 두 사용자 디렉터리이 모두 추가됩니다.
 | 
usernames
 | 문자열 배열 | No | 이 규칙에 대한 승인자의 사용자 이름 (사용자 ID와 동일하지만 사용자 이름 디렉터리이 필요합니다). 만약 user_ids와 usernames를 둘 다 제공했다면, 두 사용자 디렉터리이 모두 추가됩니다.
 | 
{
  "id": 1,
  "name": "security",
  "rule_type": "regular",
  "eligible_approvers": [
    {
      "id": 2,
      "name": "John Doe",
      "username": "jdoe",
      "state": "active",
      "avatar_url": "https://www.gravatar.com/avatar/0?s=80&d=identicon",
      "web_url": "http://localhost/jdoe"
    },
    {
      "id": 50,
      "name": "Group Member 1",
      "username": "group_member_1",
      "state": "active",
      "avatar_url": "https://www.gravatar.com/avatar/0?s=80&d=identicon",
      "web_url": "http://localhost/group_member_1"
    }
  ],
  "approvals_required": 1,
  "source_rule": null,
  "users": [
    {
      "id": 2,
      "name": "John Doe",
      "username": "jdoe",
      "state": "active",
      "avatar_url": "https://www.gravatar.com/avatar/0?s=80&d=identicon",
      "web_url": "http://localhost/jdoe"
    }
  ],
  "groups": [
    {
      "id": 5,
      "name": "group1",
      "path": "group1",
      "description": "",
      "visibility": "public",
      "lfs_enabled": false,
      "avatar_url": null,
      "web_url": "http://localhost/groups/group1",
      "request_access_enabled": false,
      "full_name": "group1",
      "full_path": "group1",
      "parent_id": null,
      "ldap_cn": null,
      "ldap_access": null
    }
  ],
  "contains_hidden_groups": false,
  "overridden": false
}
머지 요청 레벨 규칙 삭제
- 13.9에 GitLab Premium으로 이동되었습니다.
 
다음 엔드포인트를 사용하여 머지 요청 승인 규칙을 삭제할 수 있습니다.
DELETE /projects/:id/merge_requests/:merge_request_iid/approval_rules/:approval_rule_id
중요: report_approver 또는 code_owner 규칙을 삭제하는 것은 허용되지 않습니다.
이러한 규칙은 시스템에서 생성됩니다.
지원되는 속성:
| 속성 | 유형 | 필수여부 | 설명 | 
|---|---|---|---|
id
 | integer 또는 string | Yes | 프로젝트의 ID 또는 URL-encoded path. | 
approval_rule_id
 | integer | Yes | 승인 규칙의 ID. | 
merge_request_iid
 | integer | Yes | 머지 요청의 IID. | 
머지 요청 승인
- 13.9에 GitLab Premium으로 이동되었습니다.
 
허용되는 경우 다음 엔드포인트를 사용하여 머지 요청을 승인할 수 있습니다.
POST /projects/:id/merge_requests/:merge_request_iid/approve
지원되는 속성:
| 속성 | 유형 | 필수여부 | 설명 | 
|---|---|---|---|
id
 | integer 또는 string | Yes | 프로젝트의 ID 또는 URL-encoded path. | 
approval_password
 | 문자열 | No | 현재 사용자의 암호. 프로젝트 설정에서 Require user password to approve가 활성화된 경우 필요합니다. | 
merge_request_iid
 | integer | Yes | 머지 요청의 IID. | 
sha
 | 문자열 | No | 머지 요청의 HEAD.
 | 
sha 매개변수는 머지 요청 수락시와 동일한 방식으로 작동합니다: 전달되었다면, 현재 머지 요청의 HEAD와 일치해야만 승인이 추가됩니다. 일치하지 않을 경우 응답 코드는 409입니다.
{
  "id": 5,
  "iid": 5,
  "project_id": 1,
  "title": "Approvals API",
  "description": "Test",
  "state": "opened",
  "created_at": "2016-06-08T00:19:52.638Z",
  "updated_at": "2016-06-09T21:32:14.105Z",
  "merge_status": "can_be_merged",
  "approvals_required": 2,
  "approvals_left": 0,
  "approved_by": [
    {
      "user": {
        "name": "Administrator",
        "username": "root",
        "id": 1,
        "state": "active",
        "avatar_url": "http://www.gravatar.com/avatar/e64c7d89f26bd1972efa854d13d7dd61?s=80\u0026d=identicon",
        "web_url": "http://localhost:3000/root"
      }
    },
    {
      "user": {
        "name": "Nico Cartwright",
        "username": "ryley",
        "id": 2,
        "state": "active",
        "avatar_url": "http://www.gravatar.com/avatar/cf7ad14b34162a76d593e3affca2adca?s=80\u0026d=identicon",
        "web_url": "http://localhost:3000/ryley"
      }
    }
  ]
}
승인 취소하기
- 13.9에서 GitLab Premium으로 이동되었습니다.
 
Merge Request을 승인한 경우, 다음 엔드포인트를 사용하여 승인을 취소할 수 있습니다.
POST /projects/:id/merge_requests/:merge_request_iid/unapprove
지원되는 속성:
| 속성 | 유형 | 필수 여부 | 설명 | 
|---|---|---|---|
id
 | 정수 또는 문자열 | 예 | 프로젝트의 ID 또는 URL 인코딩된 경로. | 
merge_request_iid
 | 정수 | 예 | Merge Request의 IID. | 
Merge Request의 승인 재설정하기
Merge Request의 모든 승인을 지웁니다.
프로젝트 또는 그룹 토큰에 기반한 봇 사용자만 사용할 수 있습니다. 봇 권한이 없는 사용자는 401 Unauthorized 응답을 받게 됩니다.
PUT /projects/:id/merge_requests/:merge_request_iid/reset_approvals
| 속성 | 유형 | 필수 여부 | 설명 | 
|---|---|---|---|
id
 | 정수 또는 문자열 | 예 | 인증된 사용자가 소유한 프로젝트의 ID 또는 URL 인코딩된 경로. | 
merge_request_iid
 | 정수 | 예 | Merge Request의 내부 ID. | 
curl --request PUT --header "PRIVATE-TOKEN: <your_access_token>" "https://gitlab.example.com/api/v4/projects/76/merge_requests/1/reset_approvals"
도움말