Merge Request 승인 API

Tier: Premium, Ultimate Offering: GitLab.com, Self-Managed, GitLab Dedicated

프로젝트에서 모든 Merge Request에 대한 승인을 구성합니다. 모든 엔드포인트에 대해 인증되어야 합니다.

그룹 수준 Merge Request 승인

Status: Experiment
  • GitLab 16.7에서 도입됨 approval_group_rules라는 플래그로 기본적으로 비활성화됨. 이 기능은 기본적으로 비활성화됩니다. 이 기능은 실험입니다.

플래그: Self-Managed GitLab에서는 기본적으로 이 기능을 사용할 수 없습니다. 이를 사용하려면 관리자가 approval_group_rules라는 피처 플래그를 활성화해야 합니다. GitLab.com 및 GitLab Dedicated에서는 이 기능을 사용할 수 없습니다. 이 기능은 운영 환경에서 사용할 준비가 되지 않았습니다.

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

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

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

GET /groups/:id/approval_rules

pageper_page 페이지네이션 매개변수를 사용하여 승인 규칙 디렉터리을 제한할 수 있습니다.

지원되는 속성:

속성 유형 필수 설명
id integer 또는 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 또는 string Yes 그룹의 ID 또는 URL 인코딩 된 경로.
approvals_required integer Yes 이 규칙에 대한 필요한 승인 수.
name string Yes 승인 규칙의 이름.
group_ids array No 승인자로서의 그룹 ID.
rule_type string No 규칙 유형. any_approver는 기본적으로 구성된 기본 규칙으로, approvals_required0입니다. 다른 규칙은 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
}

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

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

PUT /groups/:id/approval_rules/:approval_rule_id

지원되는 속성:

속성 유형 필수 설명
approval_rule_id. integer Yes 승인 규칙의 ID.
id integer 또는 string Yes 그룹의 ID 또는 URL 인코딩 된 경로.
approvals_required string No 이 규칙에 대한 필요한 승인 수.
group_ids integer No 승인자로서의 그룹 ID.
name string No 승인 규칙의 이름.
rule_type array No 규칙 유형. any_approver는 기본적으로 구성된 기본 규칙으로, approvals_required0입니다. 다른 규칙은 regular (정규 Merge Request 승인 규칙에 사용) 및 report_approver입니다. report_approver는 설정된 및 활성화된 Merge Request 승인 정책에서 규칙이 생성될 때 자동으로 사용되며, 이 API로 승인 규칙을 생성하는 데 사용해서는 안 됩니다.
user_ids array No 승인자로서의 그룹 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
}

구성 변경

허용된 경우, 다음 엔드포인트를 사용하여 승인 구성을 변경할 수 있습니다.

POST /projects/:id/approvals

지원되는 속성:

속성 유형 필수 설명
id 정수 또는 문자열 프로젝트의 ID 또는 URL 인코딩 된 경로.
approvals_before_merge (폐기됨) 정수 아니오 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, // 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
}

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

  • 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",
    "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
  }
]

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

  • 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",
  "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
}

프로젝트 수준의 규칙 생성

History

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

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인 사전 구성된 기본 규칙입니다. 다른 규칙은 보통적인 Merge Request 승인 규칙에 사용되는 regularreport_approver가 있습니다. report_approver는 구성 및 활성화된 Merge Request 승인 정책에서 자동으로 사용되며, 이 API로 승인 규칙을 생성하는 데 사용해서는 안 됩니다.
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": "아무 이름", "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]}' \
  --url "https://gitlab.example.com/api/v4/projects/<project_id>/approval_rules"

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

History

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

PUT /projects/:id/approval_rules/:approval_rule_id
note
승인자와 그룹 (사용자 또는 그룹에 없는 숨겨진 그룹을 제외하고)가 제거됩니다. 숨겨진 그룹은 사용자가 보기 권한이 없는 비공개 그룹입니다. 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": "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
}

프로젝트 수준 규칙 삭제

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

DELETE /projects/:id/approval_rules/:approval_rule_id

지원되는 속성:

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

Merge Request 수준 MR 승인

특정 Merge Request에 대한 승인 구성. 모든 엔드포인트에 대해 인증 필요.

다음 엔드포인트를 사용하여 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": "승인 API",
  "description": "테스트",
  "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": "관리자",
        "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의 승인 상태 얻기

다음 엔드포인트를 사용하여 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": "루비",
      "rule_type": "일반",
      "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 수준 규칙 얻기

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

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

pageper_page 페이지네이션 매개변수를 사용하여 승인 규칙 디렉터리을 제한할 수 있습니다.

지원되는 속성:

속성 유형 필수 여부 설명
id 정수 또는 문자열 프로젝트의 ID 또는 URL 인코딩 된 경로.
merge_request_iid 정수 Merge Request의 IID.
[
  {
    "id": 1,
    "name": "보안",
    "rule_type": "일반",
    "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": "그룹 멤버 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 수준 규칙 생성하기

다음 엔드포인트를 사용하여 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_idsusernames를 둘 다 제공하는 경우, 사용자 디렉터리이 모두 추가됩니다.
usernames 문자열 배열 아니요 이 규칙의 승인자의 사용자 이름 (user_ids와 동일하지만 사용자 이름 디렉터리이 필요합니다). user_idsusernames를 둘 다 제공하는 경우, 사용자 디렉터리이 모두 추가됩니다.
note
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
}

Merge Request 수준 규칙 업데이트하기

다음 엔드포인트를 사용하여 Merge Request 승인 규칙을 업데이트할 수 있습니다.

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 정수 Merge Request의 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
}

Merge Request 수준 규칙 삭제

다음 엔드포인트를 사용하여 Merge Request 승인 규칙을 삭제할 수 있습니다.

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 정수 Merge Request의 IID.

Merge Request 승인

사용할 수 있는 경우 다음 엔드포인트를 사용하여 Merge Request을 승인할 수 있습니다.

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

지원되는 속성:

속성 유형 필수 여부 설명
id 정수 또는 문자열 프로젝트의 ID 또는 URL 인코딩 된 경로.
approval_password 문자열 아니 현재 사용자의 암호. 프로젝트 설정에서 사용자 암호 승인이 활성화된 경우 필수입니다.
merge_request_iid 정수 Merge Request의 IID.
sha 문자열 아니 Merge Request의 HEAD.

sha 매개변수는 Merge 승인을 추가하려면 사용 방법이 Merge Request 수락과 동일합니다: 전달된 경우 현재 Merge Request의 HEAD와 일치해야 합니다. 일치하지 않으면 응답 코드는 409입니다.

{
  "id": 5,
  "iid": 5,
  "project_id": 1,
  "title": "승인 API",
  "description": "테스트",
  "state": "열림",
  "created_at": "2016-06-08T00:19:52.638Z",
  "updated_at": "2016-06-09T21:32:14.105Z",
  "merge_status": "Merge 가능",
  "approvals_required": 2,
  "approvals_left": 0,
  "approved_by": [
    {
      "user": {
        "name": "관리자",
        "username": "root",
        "id": 1,
        "state": "활성",
        "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": "활성",
        "avatar_url": "http://www.gravatar.com/avatar/cf7ad14b34162a76d593e3affca2adca?s=80\u0026d=identicon",
        "web_url": "http://localhost:3000/ryley"
      }
    }
  ]
}

Merge Request 승인 취소

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>" \
  --url "https://gitlab.example.com/api/v4/projects/76/merge_requests/1/reset_approvals"