병합 요청 승인 API

Tier: Premium, Ultimate Offering: GitLab.com, Self-managed, GitLab Dedicated
  • 엔드포인트 /approvals는 GitLab 16.0에서 제거됨.

모든 병합 요청에 대한 승인 설정입니다. 모든 엔드포인트는 인증이 필요합니다.

그룹 수준 MR 승인

Status: Experiment
  • GitLab 16.7에 도입됨 approval_group_rules라는 플래그와 함께. 기본적으로 비활성화되어 있습니다. 이 기능은 실험입니다.

셀프 관리형 GitLab에서는 기본적으로 이 기능을 사용할 수 없습니다. 이 기능을 사용 가능하게 하려면 관리자가 approval_group_rules라는 기능 플래그를 활성화해야 합니다.
GitLab.com 및 GitLab Dedicated에서는 이 기능을 사용할 수 없습니다.
이 기능은 프로덕션 사용 준비가 되어 있지 않습니다.

그룹 승인 규칙은 그룹에 속하는 프로젝트의 모든 보호된 브랜치에 적용됩니다. 이 기능은 실험입니다.

그룹 수준 승인 규칙 가져오기

그룹 관리자는 다음 엔드포인트를 사용하여 그룹의 승인 규칙에 대한 정보를 요청할 수 있습니다:

GET /groups/:id/approval_rules

pageper_page 페이지네이션 매개변수를 사용하여 승인 규칙 목록을 제한하십시오.

지원하는 속성:

속성 유형 필수 설명
id 정수 또는 문자열 프로젝트의 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",
    "report_type": null,
    "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",
    "report_type": null,
    "eligible_approvers": [],
    "approvals_required": 2,
    "users": [],
    "groups": [],
    "contains_hidden_groups": false,
    "protected_branches": [],
    "applies_to_all_protected_branches": true
  },
  {
    "id": 4,
    "name": "rule2",
    "rule_type": "report_approver",
    "report_type": "code_coverage",
    "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 정수 또는 문자열 그룹의 ID 또는 URL-인코딩된 경로.
approvals_required 정수 이 규칙에 필요한 승인 수.
name 문자열 승인 규칙의 이름.
group_ids 배열 아니오 승인자로서의 그룹 ID.
rule_type 문자열 아니오 규칙 유형. any_approverapprovals_required0인 기본 규칙입니다. 다른 규칙은 병합 요청 승인 규칙에 사용되는 regularreport_approver가 있습니다. 이 필드를 사용하여 API에서 승인 규칙을 만들지 마세요. report_approver 필드는 GitLab이 구성되고 활성화된 병합 요청 승인 정책에서 승인 규칙을 만들 때 사용됩니다.
user_ids 배열 아니오 승인자로서의 사용자 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
}

그룹 수준 승인 규칙 업데이트

그룹 관리자는 다음 엔드포인트를 사용하여 그룹 수준 승인 규칙을 업데이트할 수 있습니다:

PUT /groups/:id/approval_rules/:approval_rule_id

지원되는 속성:

속성 유형 필수 여부 설명
approval_rule_id 정수 승인 규칙의 ID.
id 정수 또는 문자열 그룹의 ID 또는 URL-인코딩된 경로.
approvals_required 문자열 아니오 이 규칙에 필요한 승인 수.
group_ids 정수 아니오 승인자로서의 사용자 ID.
name 문자열 아니오 승인 규칙의 이름.
rule_type 배열 아니오 규칙 유형. any_approverapprovals_required0인 기본 규칙입니다. 다른 규칙은 병합 요청 승인 규칙에 사용되는 regularreport_approver가 있습니다. 이 필드를 사용하여 API에서 승인 규칙을 만들지 마세요. report_approver 필드는 GitLab이 구성되고 활성화된 병합 요청 승인 정책에서 승인 규칙을 만들 때 사용됩니다.
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 승인

다음 엔드포인트를 사용하여 프로젝트의 승인 구성에 대한 정보를 요청할 수 있습니다:

GET /projects/:id/approvals

지원되는 속성:

속성 유형 필수 설명
id 정수 또는 문자열 프로젝트의 ID 또는 URL 인코딩 경로.
{
  "approvers": [], // GitLab 12.3에서 사용 중단됨, 항상  값을 반환합니다.
  "approver_groups": [], // GitLab 12.3에서 사용 중단됨, 항상  값을 반환합니다.
  "approvals_before_merge": 2, // GitLab 12.3에서 사용 중단됨, 대신 Approval Rules를 사용하세요.
  "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, // 16.9에서 사용 중단됨, 대신 require_reauthentication_to_approve를 사용하세요.
  "require_reauthentication_to_approve": true
}

구성 변경

적절한 역할을 가진 사용자는 다음 엔드포인트를 사용하여 승인 구성을 변경할 수 있습니다:

POST /projects/:id/approvals

지원되는 속성:

속성 유형 필수 설명
id 정수 또는 문자열 프로젝트의 ID 또는 URL 인코딩 경로.
approvals_before_merge (사용 중단됨) 정수 아니요 병합 요청이 병합될 수 있기 전에 필요한 승인 수. 사용 중단됨 GitLab 12.3에서. 승인 규칙을 사용하세요.
disable_overriding_approvers_per_merge_request 불리언 아니요 병합 요청별로 승인자를 재정의할 수 있도록 허용하거나 방지합니다.
merge_requests_author_approval 불리언 아니요 저자가 병합 요청을 자가 승인할 수 있도록 허용하거나 방지합니다; true는 저자가 자가 승인을 할 수 있음을 의미합니다.
merge_requests_disable_committers_approval 불리언 아니요 커밋터가 병합 요청을 자가 승인할 수 있도록 허용하거나 방지합니다.
require_password_to_approve (사용 중단됨) 불리언 아니요 승인이 추가되기 전에 승인자가 인증을 위해 비밀번호를 입력하도록 요구합니다. 사용 중단됨 GitLab 16.9에서. 대신 require_reauthentication_to_approve를 사용하세요.
require_reauthentication_to_approve 불리언 아니요 승인이 추가되기 전에 승인자가 인증을 위해 입력하도록 요구합니다. 도입됨 GitLab 17.1에서.
reset_approvals_on_push 불리언 아니요 새로운 푸시에서 승인을 재설정합니다.
selective_code_owner_removals 불리언 아니요 파일이 변경된 경우 코드 소유자의 승인을 재설정합니다. 이 필드를 사용하려면 reset_approvals_on_push 필드를 비활성화해야 합니다.
{
  "approvals_before_merge": 2, // Approval Rules를 사용하세요.
  "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,
  "require_reauthentication_to_approve": true
}

프로젝트 수준의 규칙 가져오기

  • 페이지 매김 지원 도입됨 GitLab 15.3에서 approval_rules_pagination이라는 플래그와 함께 제공됩니다. 기본적으로 활성화되어 있습니다.
  • applies_to_all_protected_branches 속성 도입됨 GitLab 15.3에서.
  • 페이지 매김 지원 일반적으로 사용 가능 GitLab 15.7에서. 기능 플래그 approval_rules_pagination 제거됨.
  • usernames 속성 도입됨 GitLab 15.8에서.

프로젝트의 승인 규칙에 대한 정보를 다음 엔드포인트를 사용하여 요청할 수 있습니다:

GET /projects/:id/approval_rules

pageper_page 페이지 매김 매개변수를 사용하여 승인 규칙 목록을 제한합니다.

지원되는 속성:

속성 유형 필수 설명
id 정수 또는 문자열 프로젝트의 ID 또는 URL 인코딩 경로입니다.
[
  {
    "id": 1,
    "name": "security",
    "rule_type": "regular",
    "report_type": null,
    "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": "개발자 + 유지 관리자"
          }
        ],
        "merge_access_levels": [
          {
            "access_level": 30,
            "access_level_description": "개발자 + 유지 관리자"
          }
        ],
        "unprotect_access_levels": [
          {
            "access_level": 40,
            "access_level_description": "유지 관리자"
          }
        ],
        "code_owner_approval_required": "false"
      }
    ],
    "contains_hidden_groups": false
  },
  {
    "id": 2,
    "name": "Coverage-Check",
    "rule_type": "report_approver",
    "report_type": "code_coverage",
    "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": "개발자 + 유지 관리자"
          }
        ],
        "merge_access_levels": [
          {
            "access_level": 30,
            "access_level_description": "개발자 + 유지 관리자"
          }
        ],
        "unprotect_access_levels": [
          {
            "access_level": 40,
            "access_level_description": "유지 관리자"
          }
        ],
        "code_owner_approval_required": "false"
      }
    ],
    "contains_hidden_groups": false
  }
]

단일 프로젝트 수준 규칙 가져오기

  • applies_to_all_protected_branches 속성은 GitLab 15.3에서 도입됨.
  • usernames 속성은 GitLab 15.8에서 도입됨.

단일 프로젝트 승인 규칙에 대한 정보를 다음 엔드포인트를 사용하여 요청할 수 있습니다:

GET /projects/:id/approval_rules/:approval_rule_id

지원하는 속성:

속성 유형 필수 설명
id 정수 또는 문자열 프로젝트의 ID 또는 URL 인코딩 경로.
approval_rule_id 정수 승인 규칙의 ID.
{
  "id": 1,
  "name": "security",
  "rule_type": "regular",
  "report_type": null,
  "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에서 사용 중단됨)code_coverage입니다.
rule_type 문자열 아니오 규칙 유형. any_approverapprovals_required0인 미리 구성된 기본 규칙입니다. 다른 규칙은 regular (정규 병합 요청 승인 규칙에 사용됨) 및 report_approver입니다. 이 필드를 사용하여 API에서 승인 규칙을 구축하지 마세요. report_approver 필드는 GitLab이 구성된 승인 규칙을 생성할 때 사용됩니다. 병합 요청 승인 정책에서.
user_ids 배열 아니오 승인자로서의 사용자 ID. user_idsusernames 둘 다 제공할 경우 사용자 목록이 추가됩니다.
usernames 문자열 배열 아니오 이 규칙의 승인자 사용자 이름 (user_ids와 동일하지만 사용자 이름 목록이 필요합니다). user_idsusernames 둘 다 제공할 경우 사용자 목록이 추가됩니다.
{
  "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": "Any name", "rule_type": "any_approver", "approvals_required": 2}'

또 다른 예는 사용자 특정 규칙을 생성하는 것입니다:

curl --request POST \
  --header "PRIVATE-TOKEN: <your_access_token>" \
  --header 'Content-Type: application/json' \
  --data '{"name": "Name of your rule", "approvals_required": 3, "user_ids": [123, 456, 789]}' \
  --url "https://gitlab.example.com/api/v4/projects/<project_id>/approval_rules"

프로젝트 수준 규칙 업데이트

프로젝트 승인 규칙은 다음 엔드포인트를 사용하여 업데이트할 수 있습니다:

PUT /projects/:id/approval_rules/:approval_rule_id

참고: 승인자와 그룹(‘users’ 또는 ‘groups’ 매개변수에 없는 숨겨진 그룹 제외)은 제거됩니다. 숨겨진 그룹은 사용자가 볼 수 있는 권한이 없는 비공개 그룹입니다. 숨겨진 그룹은 remove_hidden_groups 매개변수가 true로 설정되지 않는 한 기본적으로 제거되지 않습니다. 이렇게 하면 사용자가 승인 규칙을 업데이트할 때 숨겨진 그룹이 의도치 않게 제거되지 않습니다.

지원하는 속성:

속성 유형 필수 설명
id 정수 또는 문자열 프로젝트의 ID 또는 URL 인코딩 경로입니다.
approvals_required 정수 이 규칙에 필요한 승인 수입니다.
approval_rule_id 정수 승인 규칙의 ID입니다.
name 문자열 승인 규칙의 이름입니다.
applies_to_all_protected_branches 불리언 아니오 이 규칙을 모든 보호된 브랜치에 적용할지 여부입니다. true로 설정하면 protected_branch_ids의 값을 무시합니다. 기본값은 false입니다. GitLab 15.3에서 도입되었습니다.
group_ids 배열 아니오 승인자로서의 그룹 ID입니다.
protected_branch_ids 배열 아니오 규칙의 범위를 지정할 보호된 브랜치의 ID입니다. ID를 식별하려면 API를 사용하세요.
remove_hidden_groups 불리언 아니오 승인 규칙에서 숨겨진 그룹을 제거할지 여부입니다.
user_ids 배열 아니오 승인자로서의 사용자 ID입니다. user_idsusernames를 모두 제공하면 두 사용자 목록이 추가됩니다.
usernames 문자열 배열 아니오 이 규칙에 대한 승인자의 사용자 이름입니다(‘user_ids’와 동일하지만 사용자 이름 목록이 필요합니다). user_idsusernames를 모두 제공하면 두 사용자 목록이 추가됩니다.
{
  "id": 1,
  "name": "security",
  "rule_type": "regular",
  "eligible_approvers": [
    {
      "id": 2,
      "name": "존 도우",
      "username": "jdoe",
      "state": "active",
      "avatar_url": "https://www.gravatar.com/avatar/0?s=80&d=identicon",
      "web_url": "http://localhost/jdoe"
    },
    {
      "id": 50,
      "name": "그룹 구성원 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": "존 도우",
      "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": "개발자 + 유지 관리자"
        }
      ],
      "merge_access_levels": [
        {
          "access_level": 30,
          "access_level_description": "개발자 + 유지 관리자"
        }
      ],
      "unprotect_access_levels": [
        {
          "access_level": 40,
          "access_level_description": "유지 관리자"
        }
      ],
      "code_owner_approval_required": "false"
    }
  ],
  "contains_hidden_groups": false
}

프로젝트 수준 규칙 삭제

다음 엔드포인트를 사용하여 프로젝트 승인 규칙을 삭제할 수 있습니다:

DELETE /projects/:id/approval_rules/:approval_rule_id

지원되는 속성:

속성 유형 필수 설명
id 정수 또는 문자열 프로젝트의 ID 또는 URL 인코딩 경로입니다.
approval_rule_id 정수 승인 규칙의 ID입니다.

병합 요청 수준 MR 승인

특정 병합 요청에 대한 승인 구성. 모든 엔드포인트는 인증이 필요합니다.

다음 엔드포인트를 사용하여 병합 요청의 승인 상태에 대한 정보를 요청할 수 있습니다:

GET /projects/:id/merge_requests/:merge_request_iid/approvals

지원되는 속성:

속성 유형 필수 설명
id 정수 또는 문자열 프로젝트의 ID 또는 URL 인코딩 경로입니다.
merge_request_iid 정수 병합 요청의 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"
      }
    }
  ]
}

병합 요청의 승인 상태 가져오기

다음 엔드포인트를 사용하여 병합 요청의 승인 상태에 대한 정보를 요청할 수 있습니다:

GET /projects/:id/merge_requests/:merge_request_iid/approval_state

approval_rules_overwritten은 병합 요청을 위한 병합 요청 수준 규칙이 생성된 경우 true입니다. 없다면 false입니다.

이는 이미 승인한 사용자(approved_by)에 대한 추가 정보와 규칙이 이미 승인되었는지 여부(approved)를 포함합니다.

지원되는 속성:

속성 유형 필수 설명
id 정수 또는 문자열 프로젝트의 ID 또는 URL 인코딩 경로입니다.
merge_request_iid 정수 병합 요청의 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
    }
  ]
}

병합 요청 수준 규칙

  • 페이지 네이션 지원 도입됨 GitLab 15.3 플래그와 함께 approval_rules_pagination. 기본적으로 활성화됩니다.
  • 페이지 네이션 지원 일반 제공됨 GitLab 15.7. 기능 플래그 approval_rules_pagination가 제거되었습니다.

다음 엔드포인트를 사용하여 병합 요청의 승인 규칙에 대한 정보를 요청할 수 있습니다:

GET /projects/:id/merge_requests/:merge_request_iid/approval_rules

pageper_page 페이지 네이션 매개변수를 사용하여 승인 규칙 목록을 제한하세요.

지원되는 속성:

속성 유형 필수 설명
id 정수 또는 문자열 프로젝트의 ID 또는 URL로 인코딩된 경로.
merge_request_iid 정수 병합 요청의 IID.
[
  {
    "id": 1,
    "name": "security",
    "rule_type": "regular",
    "report_type": null,
    "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
  },
  {
    "id": 2,
    "name": "Coverage-Check",
    "rule_type": "report_approver",
    "report_type": "code_coverage",
    "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
  }
]

단일 병합 요청 수준 규칙 가져오기

다음 엔드포인트를 사용하여 단일 병합 요청 승인 규칙에 대한 정보를 요청할 수 있습니다:

GET /projects/:id/merge_requests/:merge_request_iid/approval_rules/:approval_rule_id

지원되는 속성:

속성 유형 필수 설명
id 정수 또는 문자열 프로젝트의 ID 또는 URL 인코딩된 경로.
approval_rule_id 정수 승인 규칙의 ID입니다.
merge_request_iid 정수 병합 요청의 IID입니다.
{
  "id": 1,
  "name": "security",
  "rule_type": "regular",
  "report_type": null,
  "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
}

병합 요청 수준 규칙 생성

다음 엔드포인트를 사용하여 병합 요청 승인 규칙을 생성할 수 있습니다:

POST /projects/:id/merge_requests/:merge_request_iid/approval_rules

지원되는 속성:

속성 유형 필수 설명
id 정수 또는 문자열 프로젝트의 ID 또는 URL 인코딩된 경로
approvals_required 정수 이 규칙에 필요한 승인 수입니다.
merge_request_iid 정수 병합 요청의 IID입니다.
name 문자열 승인 규칙의 이름입니다.
approval_project_rule_id 정수 아니오 프로젝트 수준 승인 규칙의 ID입니다.
group_ids 배열 아니오 승인자로서의 그룹 ID입니다.
user_ids 배열 아니오 승인자로서의 사용자 ID입니다. user_idsusernames를 모두 제공하면 두 목록의 사용자가 추가됩니다.
usernames 문자열 배열 아니오 이 규칙의 승인자 사용자 이름입니다 (사용자 ID와 동일하지만 사용자 이름 목록이 필요합니다). user_idsusernames를 모두 제공하면 두 목록의 사용자가 추가됩니다.

주의: 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
}

병합 요청 수준 규칙 업데이트

병합 요청 승인 규칙을 업데이트하려면, 다음 엔드포인트를 사용하세요:

PUT /projects/:id/merge_requests/:merge_request_iid/approval_rules/:approval_rule_id

이 엔드포인트는 users 또는 groups 매개변수에 없는 모든 승인자와 그룹을 제거합니다.

report_approver 또는 code_owner 규칙은 시스템에 의해 생성된 규칙이므로 업데이트할 수 없습니다.

지원되는 속성:

속성 유형 필수 설명
id 정수 또는 문자열 프로젝트의 ID 또는 URL 인코딩된 경로.
approval_rule_id 정수 승인 규칙의 ID.
merge_request_iid 정수 병합 요청의 IID.
approvals_required 정수 아니오 이 규칙에 필요한 승인 수.
group_ids 배열 아니오 승인자로서의 그룹의 ID.
name 문자열 아니오 승인 규칙의 이름.
remove_hidden_groups 불리언 아니오 숨겨진 그룹을 제거할지 여부.
user_ids 배열 아니오 승인자로서의 사용자 ID. user_idsusernames를 모두 제공하면 두 목록의 사용자가 추가됩니다.
usernames 문자열 배열 아니오 이 규칙의 승인자 사용자 이름 (같은 user_ids와 같지만 사용자 이름 목록이 필요함). user_idsusernames를 모두 제공하면 두 목록의 사용자가 추가됩니다.
{
  "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
}

병합 요청 수준 규칙 삭제

다음 엔드포인트를 사용하여 병합 요청 승인 규칙을 삭제할 수 있습니다:

DELETE /projects/:id/merge_requests/:merge_request_iid/approval_rules/:approval_rule_id

report_approver 또는 code_owner 규칙은 시스템에서 생성된 규칙이므로 업데이트할 수 없습니다.

지원되는 속성:

속성 유형 필수 설명
id 정수 또는 문자열 프로젝트의 ID 또는 URL 인코딩된 경로입니다.
approval_rule_id 정수 승인 규칙의 ID입니다.
merge_request_iid 정수 병합 요청의 IID입니다.

병합 요청 승인

적절한 역할을 가진 사용자는 이 엔드포인트를 사용하여 병합 요청을 승인할 수 있습니다:

POST /projects/:id/merge_requests/:merge_request_iid/approve

지원되는 속성:

속성 유형 필수 설명
id 정수 또는 문자열 프로젝트의 ID 또는 URL 인코딩된 경로입니다.
approval_password 문자열 아니오 현재 사용자의 비밀번호입니다. 프로젝트 설정에서 승인을 위한 사용자 재인증 필요가 활성화되어 있는 경우 필수입니다. 그룹 또는 자체 관리 인스턴스가 SAML 인증을 강제하도록 구성된 경우 항상 실패합니다.
merge_request_iid 정수 병합 요청의 IID입니다.
sha 문자열 아니오 병합 요청의 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"
      }
    }
  ]
}

병합 요청 승인 취소

병합 요청을 승인한 경우, 다음 엔드포인트를 사용하여 승인 취소할 수 있습니다:

POST /projects/:id/merge_requests/:merge_request_iid/unapprove

지원되는 속성:

속성 타입 필수 설명
id 정수 또는 문자열 프로젝트의 ID 또는 URL 인코딩된 경로입니다.
merge_request_iid 정수 병합 요청의 IID입니다.

병합 요청의 승인 초기화

병합 요청의 모든 승인을 지웁니다.

프로젝트 또는 그룹 토큰을 기반으로 봇 사용자만 사용할 수 있습니다. 봇 권한이 없는 사용자는 401 Unauthorized 응답을 받습니다.

PUT /projects/:id/merge_requests/:merge_request_iid/reset_approvals
속성 타입 필수 설명
id 정수 또는 문자열 프로젝트의 ID 또는 URL 인코딩된 경로입니다.
merge_request_iid 정수 병합 요청의 내부 ID입니다.
curl --request PUT \
  --header "PRIVATE-TOKEN: <your_access_token>" \
  --url "https://gitlab.example.com/api/v4/projects/76/merge_requests/1/reset_approvals"