InfoGrab Docs

머지 리퀘스트 승인 API

요약

이 API를 사용하여 머지 리퀘스트 승인을 관리할 수 있습니다. 모든 엔드포인트는 인증이 필요합니다. 지정된 머지 리퀘스트를 승인합니다. sha 파라미터는 현재 버전의 머지 리퀘스트를 승인하고 있음을 보장합니다. API를 사용하여 머지 리퀘스트를 생성하고 즉시 승인하는 경우, 커밋이 완전히 처리되기 전에 자동화가 머지 리퀘스트를 승인할 수 있습니다.

히스토리

이 API를 사용하여 머지 리퀘스트 승인을 관리할 수 있습니다.

모든 엔드포인트는 인증이 필요합니다.

머지 리퀘스트 승인#

지정된 머지 리퀘스트를 승인합니다. 현재 인증된 사용자는 승인 가능한 사용자여야 합니다.

sha 파라미터는 현재 버전의 머지 리퀘스트를 승인하고 있음을 보장합니다. 정의된 경우, 값은 머지 리퀘스트의 HEAD 커밋 SHA와 일치해야 합니다. 일치하지 않으면 409 Conflict 응답이 반환됩니다. 이는 머지 리퀘스트 수락과 동일한 동작입니다.

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

지원하는 속성:

속성 타입 필수 여부 설명
id integer 또는 string 프로젝트의 ID 또는 URL 인코딩된 경로.
approval_password string 아니오 현재 사용자의 비밀번호. 프로젝트 설정에서 승인 시 사용자 재인증 요구가 활성화된 경우 필요합니다. 그룹 또는 GitLab Self-Managed 인스턴스가 SAML 인증을 강제하도록 구성된 경우 항상 실패합니다.
merge_request_iid integer 머지 리퀘스트의 IID.
sha string 아니오 머지 리퀘스트의 HEAD.
{
  "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"
      },
      "approved_at": "2016-06-10T04:21:41.050Z"
    },
    {
      "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"
      },
      "approved_at": "2016-06-10T09:17:13.520Z"
    }
  ]
}

자동화된 머지 리퀘스트에서 승인 초기화 방지#

API를 사용하여 머지 리퀘스트를 생성하고 즉시 승인하는 경우, 커밋이 완전히 처리되기 전에 자동화가 머지 리퀘스트를 승인할 수 있습니다. 기본적으로 머지 리퀘스트에 새 커밋을 추가하면 기존 승인이 초기화됩니다. 이 경우 머지 리퀘스트의 활동 영역에 다음과 같은 메시지 시퀀스가 표시됩니다:

  • (botname)이 5분 전에 이 머지 리퀘스트를 승인했습니다
  • (botname)이 5분 전에 1개의 커밋을 추가했습니다
  • (botname)이 브랜치에 푸시하여 5분 전에 (botname)의 승인을 초기화했습니다

자동화된 승인이 커밋 처리가 완료되기 전에 적용되지 않도록 하려면, 자동화에서 다음 조건이 충족될 때까지 대기(또는 sleep) 함수를 추가해야 합니다:

  • detailed_merge_status 속성이 checking 또는 approvals_syncing 상태가 아닌 경우.
  • 머지 리퀘스트 diff에 NULL이 아닌 patch_id_sha가 포함된 경우.

머지 리퀘스트 승인 취소#

지정된 머지 리퀘스트에서 현재 인증된 사용자의 승인을 제거합니다.

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

지원하는 속성:

속성 타입 필수 여부 설명
id integer 또는 string 프로젝트의 ID 또는 URL 인코딩된 경로.
merge_request_iid integer 머지 리퀘스트의 IID.

머지 리퀘스트 승인 초기화#

지정된 머지 리퀘스트의 모든 승인을 초기화합니다.

유효한 프로젝트 또는 그룹 토큰을 가진 봇 사용자에게만 허용됩니다. 실제 사람 사용자는 401 Unauthorized 응답을 받습니다.

PUT /projects/:id/merge_requests/:merge_request_iid/reset_approvals
속성 타입 필수 여부 설명
id integer 또는 string 프로젝트의 ID 또는 URL 인코딩된 경로.
merge_request_iid integer 머지 리퀘스트의 내부 ID.
curl --request PUT \
  --header "PRIVATE-TOKEN: <your_access_token>" \
  --url "https://gitlab.example.com/api/v4/projects/76/merge_requests/1/reset_approvals"

프로젝트 승인 규칙#

이 엔드포인트는 프로젝트와 해당 승인 규칙에 적용됩니다. 모든 엔드포인트는 인증이 필요합니다.

프로젝트 승인 구성 조회#

프로젝트의 승인 구성을 조회합니다.

GET /projects/:id/approvals

지원하는 속성:

속성 타입 필수 여부 설명
id integer 또는 string 프로젝트의 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, // 16.9에서 더 이상 사용되지 않음, 대신 require_reauthentication_to_approve 사용
  "require_reauthentication_to_approve": true
}

프로젝트 승인 구성 업데이트#

프로젝트의 승인 구성을 업데이트합니다. 현재 인증된 사용자는 승인 가능한 사용자여야 합니다.

POST /projects/:id/approvals

지원하는 속성:

속성 타입 필수 여부 설명
id integer 또는 string 프로젝트의 ID 또는 URL 인코딩된 경로.
approvals_before_merge (더 이상 사용되지 않음) integer 아니오 머지 리퀘스트가 머지되기 전에 필요한 승인 수. GitLab 12.3에서 더 이상 사용되지 않습니다. 대신 승인 규칙 생성을 사용하세요.
disable_overriding_approvers_per_merge_request boolean 아니오 true이면 머지 리퀘스트에서 승인자 재정의를 방지합니다.
merge_requests_author_approval boolean 아니오 true이면 작성자가 자신의 머지 리퀘스트를 자체 승인할 수 있습니다.
merge_requests_disable_committers_approval boolean 아니오 true이면 머지 리퀘스트에 커밋한 사용자는 승인할 수 없습니다.
require_password_to_approve (더 이상 사용되지 않음) boolean 아니오 true이면 승인자가 승인을 추가하기 전에 비밀번호로 인증해야 합니다. GitLab 16.9에서 더 이상 사용되지 않습니다. 대신 require_reauthentication_to_approve를 사용하세요.
require_reauthentication_to_approve boolean 아니오 true이면 승인자가 승인을 추가하기 전에 인증해야 합니다. GitLab 17.1에서 도입되었습니다.
reset_approvals_on_push boolean 아니오 true이면 푸시 시 승인이 초기화됩니다.
selective_code_owner_removals boolean 아니오 true이면 파일이 변경되면 코드 소유자의 승인을 초기화합니다. 이 필드를 사용하려면 reset_approvals_on_pushfalse여야 합니다.
{
  "approvals_before_merge": 2, // 대신 승인 규칙 사용
  "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
}

프로젝트의 모든 승인 규칙 목록 조회#

지정된 프로젝트의 모든 승인 규칙과 관련 세부 정보를 나열합니다.

GET /projects/:id/approval_rules

승인 규칙 목록을 제한하려면 pageper_page 페이지네이션 파라미터를 사용하세요.

지원하는 속성:

속성 타입 필수 여부 설명
id integer 또는 string 프로젝트의 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": "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,
  },
  {
    "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": "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,
  }
]

응답의 각 객체에는 eligible_approvers 배열이 포함됩니다. 이 배열은 해당 규칙이 적용되는 머지 리퀘스트를 승인할 수 있는 사용자 목록입니다. 적격 승인자는 규칙 설정, 프로젝트 및 그룹 멤버십에 따라 달라집니다. 자세한 내용은 적격 승인자를 참조하세요.

프로젝트 승인 규칙 조회#

프로젝트의 지정된 승인 규칙에 대한 정보를 조회합니다.

GET /projects/:id/approval_rules/:approval_rule_id

지원하는 속성:

속성 타입 필수 여부 설명
id integer 또는 string 프로젝트의 ID 또는 URL 인코딩된 경로.
approval_rule_id integer 승인 규칙의 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
}

프로젝트 승인 규칙 생성#

프로젝트에 대한 승인 규칙을 생성합니다.

rule_type 필드는 다음과 같은 규칙 유형을 지원합니다:

  • any_approver: approvals_required0으로 설정된 사전 구성된 기본 규칙.
  • regular: 일반 머지 리퀘스트 승인 규칙에 사용됩니다.
  • report_approver: GitLab이 구성되고 활성화된 머지 리퀘스트 승인 정책에서 승인 규칙을 생성할 때 사용됩니다. 이 API로 승인 규칙을 생성할 때 이 값을 사용하지 마세요.
POST /projects/:id/approval_rules

지원하는 속성:

속성 타입 필수 여부 설명
id integer 또는 string 프로젝트의 ID 또는 URL 인코딩된 경로.
approvals_required integer 이 규칙에 필요한 승인 수.
name string 승인 규칙의 이름. 1024자로 제한됩니다.
applies_to_all_protected_branches boolean 아니오 true이면 규칙을 모든 보호된 브랜치에 적용하고 protected_branch_ids 속성을 무시합니다.
group_ids Array 아니오 승인자로서 그룹의 ID.
protected_branch_ids Array 아니오 규칙 범위를 지정할 보호된 브랜치의 ID. ID를 확인하려면 보호된 브랜치 목록 API를 사용하세요.
report_type string 아니오 보고서 유형. 규칙 유형이 report_approver일 때 필요합니다. 지원하는 보고서 유형은 license_scanning (GitLab 15.9에서 더 이상 사용되지 않음)code_coverage입니다.
rule_type string 아니오 규칙 유형. 지원하는 값은 any_approver, regular, report_approver입니다.
user_ids Array 아니오 승인자로서 사용자의 ID. usernames와 함께 사용하면 두 목록의 사용자가 모두 추가됩니다.
usernames string array 아니오 승인자의 사용자 이름. user_ids와 함께 사용하면 두 목록의 사용자가 모두 추가됩니다.
{
  "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}' \
  --url "https://gitlab.example.com/api/v4/projects/<project_id>/approval_rules"

사용자별 규칙을 생성하는 또 다른 예시:

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"

프로젝트 승인 규칙 업데이트#

프로젝트의 지정된 승인 규칙을 업데이트합니다. 이 엔드포인트는 group_ids, user_ids, 또는 usernames 속성에 정의되지 않은 승인자와 그룹을 제거합니다.

사용자가 볼 권한이 없는 숨겨진 그룹(비공개 그룹)이 users 또는 groups 파라미터에 없는 경우 기본적으로 유지됩니다. 이를 제거하려면 remove_hidden_groupstrue로 설정하세요. 이렇게 하면 사용자가 승인 규칙을 업데이트할 때 숨겨진 그룹이 의도치 않게 제거되지 않습니다.

PUT /projects/:id/approval_rules/:approval_rule_id

지원하는 속성:

속성 타입 필수 여부 설명
approval_rule_id integer 승인 규칙의 ID.
id integer 또는 string 프로젝트의 ID 또는 URL 인코딩된 경로.
applies_to_all_protected_branches boolean 아니오 true이면 규칙을 모든 보호된 브랜치에 적용하고 protected_branch_ids 속성을 무시합니다.
approvals_required integer 아니오 이 규칙에 필요한 승인 수.
group_ids Array 아니오 승인자로서 그룹의 ID.
name string 아니오 승인 규칙의 이름. 1024자로 제한됩니다.
protected_branch_ids Array 아니오 규칙 범위를 지정할 보호된 브랜치의 ID. ID를 확인하려면 보호된 브랜치 목록 API를 사용하세요.
remove_hidden_groups boolean 아니오 true이면 승인 규칙에서 숨겨진 그룹을 제거합니다.
user_ids Array 아니오 승인자로서 사용자의 ID. usernames와 함께 사용하면 두 목록의 사용자가 모두 추가됩니다.
usernames string array 아니오 승인자의 사용자 이름. user_ids와 함께 사용하면 두 목록의 사용자가 모두 추가됩니다.
{
  "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 integer 또는 string 프로젝트의 ID 또는 URL 인코딩된 경로.
approval_rule_id integer 승인 규칙의 ID.

머지 리퀘스트 승인 규칙#

이 엔드포인트는 개별 머지 리퀘스트에 적용됩니다. 모든 엔드포인트는 인증이 필요합니다.

머지 리퀘스트 승인 상태 조회#

지정된 머지 리퀘스트의 승인 상태를 조회합니다.

응답에서 approved_by는 해당 승인이 승인 규칙을 충족하는지 여부에 관계없이 머지 리퀘스트의 모든 승인자에 대한 정보를 포함합니다. 머지 리퀘스트의 승인 규칙과 받은 승인이 해당 규칙을 충족하는지에 대한 더 자세한 정보는 /approval_state 엔드포인트를 참조하세요.

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

지원하는 속성:

속성 타입 필수 여부 설명
id integer 또는 string 프로젝트의 ID 또는 URL 인코딩된 경로.
merge_request_iid integer 머지 리퀘스트의 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"
      },
      "approved_at": "2016-06-09T01:45:21.720Z"
    }
  ]
}

머지 리퀘스트 승인 세부 정보 조회#

지정된 머지 리퀘스트의 승인 세부 정보를 조회합니다.

사용자가 머지 리퀘스트의 승인 규칙을 수정한 경우 응답에 다음이 포함됩니다:

  • approval_rules_overwritten: true이면 기본 승인 규칙이 수정되었음을 나타냅니다.
  • approved: true이면 관련 승인 규칙이 승인되었음을 나타냅니다.
  • approved_by: 정의된 경우 관련 승인 규칙을 승인한 사용자의 세부 정보를 나타냅니다. 승인 규칙과 일치하지 않는 사용자는 반환되지 않습니다. 모든 승인 사용자를 반환하려면 /approvals 엔드포인트를 참조하세요.
GET /projects/:id/merge_requests/:merge_request_iid/approval_state

지원하는 속성:

속성 타입 필수 여부 설명
id integer 또는 string 프로젝트의 ID 또는 URL 인코딩된 경로.
merge_request_iid integer 머지 리퀘스트의 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
    }
  ]
}

머지 리퀘스트의 모든 승인 규칙 목록 조회#

지정된 머지 리퀘스트의 모든 승인 규칙과 관련 세부 정보를 나열합니다.

승인 규칙 목록을 제한하려면 pageper_page 페이지네이션 파라미터를 사용하세요.

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

지원하는 속성:

속성 타입 필수 여부 설명
id integer 또는 string 프로젝트의 ID 또는 URL 인코딩된 경로.
merge_request_iid integer 머지 리퀘스트의 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 integer 또는 string 프로젝트의 ID 또는 URL 인코딩된 경로.
approval_rule_id integer 승인 규칙의 ID.
merge_request_iid integer 머지 리퀘스트의 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로 approval_project_rule_id가 설정된 경우 이 엔드포인트는:

  • 프로젝트 규칙에서 name, users, groups 값을 복사합니다.
  • 지정한 approvals_required 값을 사용합니다.
POST /projects/:id/merge_requests/:merge_request_iid/approval_rules

지원하는 속성:

속성 타입 필수 여부 설명
id integer 또는 string 프로젝트의 ID 또는 URL 인코딩된 경로.
approvals_required integer 이 규칙에 필요한 승인 수.
merge_request_iid integer 머지 리퀘스트의 IID.
name string 승인 규칙의 이름. 1024자로 제한됩니다.
approval_project_rule_id integer 아니오 프로젝트 승인 규칙의 ID.
group_ids Array 아니오 승인자로서 그룹의 ID.
user_ids Array 아니오 승인자로서 사용자의 ID. usernames와 함께 사용하면 두 목록의 사용자가 모두 추가됩니다.
usernames string array 아니오 승인자의 사용자 이름. user_ids와 함께 사용하면 두 목록의 사용자가 모두 추가됩니다.
{
  "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
}

머지 리퀘스트 승인 규칙 업데이트#

머지 리퀘스트의 지정된 승인 규칙을 업데이트합니다. 이 엔드포인트는 group_ids, user_ids, 또는 usernames 속성에 포함되지 않은 승인자와 그룹을 제거합니다.

report_approver 또는 code_owner 규칙은 시스템에서 생성되며 편집할 수 없습니다.

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

지원하는 속성:

속성 타입 필수 여부 설명
id integer 또는 string 프로젝트의 ID 또는 URL 인코딩된 경로.
approval_rule_id integer 승인 규칙의 ID.
merge_request_iid integer 머지 리퀘스트의 IID.
approvals_required integer 아니오 이 규칙에 필요한 승인 수.
group_ids Array 아니오 승인자로서 그룹의 ID.
name string 아니오 승인 규칙의 이름. 1024자로 제한됩니다.
remove_hidden_groups boolean 아니오 true이면 숨겨진 그룹을 제거합니다.
user_ids Array 아니오 승인자로서 사용자의 ID. usernames와 함께 사용하면 두 목록의 사용자가 모두 추가됩니다.
usernames string array 아니오 승인자의 사용자 이름. user_ids와 함께 사용하면 두 목록의 사용자가 모두 추가됩니다.
{
  "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 integer 또는 string 프로젝트의 ID 또는 URL 인코딩된 경로.
approval_rule_id integer 승인 규칙의 ID.
merge_request_iid integer 머지 리퀘스트의 IID.

그룹 승인 규칙#

히스토리
Feature flag

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

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

그룹의 모든 승인 규칙 목록 조회#

히스토리

지정된 그룹의 모든 승인 규칙과 관련 세부 정보를 나열합니다. 그룹 관리자로 제한됩니다.

승인 규칙 목록을 제한하려면 pageper_page 페이지네이션 파라미터를 사용하세요.

GET /groups/:id/approval_rules

지원하는 속성:

속성 타입 필수 여부 설명
id integer 또는 string 프로젝트의 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
  }
]

그룹 승인 규칙 생성#

그룹에 대한 승인 규칙을 생성합니다. 그룹 관리자로 제한됩니다.

API에서 승인 규칙을 빌드할 때 rule_type 필드를 사용하지 마세요. 이 필드는 다음과 같은 규칙 유형을 지원합니다:

POST /groups/:id/approval_rules

지원하는 속성:

속성 타입 필수 여부 설명
id integer 또는 string 그룹의 ID 또는 URL 인코딩된 경로.
approvals_required integer 이 규칙에 필요한 승인 수.
name string 승인 규칙의 이름. 1024자로 제한됩니다.
group_ids array 아니오 승인자로서 그룹의 ID.
rule_type string 아니오 규칙 유형. 지원하는 값은 any_approver, regular, report_approver입니다.
user_ids array 아니오 승인자로서 사용자의 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
}

그룹 승인 규칙 업데이트#

히스토리

그룹의 승인 규칙을 업데이트합니다. 그룹 관리자로 제한됩니다.

API에서 승인 규칙을 빌드할 때 rule_type 필드를 사용하지 마세요. 이 필드는 다음과 같은 규칙 유형을 지원합니다:

PUT /groups/:id/approval_rules/:approval_rule_id

지원하는 속성:

속성 타입 필수 여부 설명
approval_rule_id integer 승인 규칙의 ID.
id integer 또는 string 그룹의 ID 또는 URL 인코딩된 경로.
approvals_required string 아니오 이 규칙에 필요한 승인 수.
group_ids integer 아니오 승인자로서 사용자의 ID.
name string 아니오 승인 규칙의 이름. 1024자로 제한됩니다.
rule_type array 아니오 규칙 유형. 지원하는 값은 any_approver, regular, report_approver입니다.
user_ids array 아니오 승인자로서 그룹의 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
}

머지 리퀘스트 승인 API

Tier: Premium, Ultimate
Offering: GitLab.com, GitLab Self-Managed, GitLab Dedicated
원문 보기
요약

이 API를 사용하여 머지 리퀘스트 승인을 관리할 수 있습니다. 모든 엔드포인트는 인증이 필요합니다. 지정된 머지 리퀘스트를 승인합니다. sha 파라미터는 현재 버전의 머지 리퀘스트를 승인하고 있음을 보장합니다. API를 사용하여 머지 리퀘스트를 생성하고 즉시 승인하는 경우, 커밋이 완전히 처리되기 전에 자동화가 머지 리퀘스트를 승인할 수 있습니다.

히스토리

이 API를 사용하여 머지 리퀘스트 승인을 관리할 수 있습니다.

모든 엔드포인트는 인증이 필요합니다.

머지 리퀘스트 승인#

지정된 머지 리퀘스트를 승인합니다. 현재 인증된 사용자는 승인 가능한 사용자여야 합니다.

sha 파라미터는 현재 버전의 머지 리퀘스트를 승인하고 있음을 보장합니다. 정의된 경우, 값은 머지 리퀘스트의 HEAD 커밋 SHA와 일치해야 합니다. 일치하지 않으면 409 Conflict 응답이 반환됩니다. 이는 머지 리퀘스트 수락과 동일한 동작입니다.

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

지원하는 속성:

속성 타입 필수 여부 설명
id integer 또는 string 프로젝트의 ID 또는 URL 인코딩된 경로.
approval_password string 아니오 현재 사용자의 비밀번호. 프로젝트 설정에서 승인 시 사용자 재인증 요구가 활성화된 경우 필요합니다. 그룹 또는 GitLab Self-Managed 인스턴스가 SAML 인증을 강제하도록 구성된 경우 항상 실패합니다.
merge_request_iid integer 머지 리퀘스트의 IID.
sha string 아니오 머지 리퀘스트의 HEAD.
{
  "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"
      },
      "approved_at": "2016-06-10T04:21:41.050Z"
    },
    {
      "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"
      },
      "approved_at": "2016-06-10T09:17:13.520Z"
    }
  ]
}

자동화된 머지 리퀘스트에서 승인 초기화 방지#

API를 사용하여 머지 리퀘스트를 생성하고 즉시 승인하는 경우, 커밋이 완전히 처리되기 전에 자동화가 머지 리퀘스트를 승인할 수 있습니다. 기본적으로 머지 리퀘스트에 새 커밋을 추가하면 기존 승인이 초기화됩니다. 이 경우 머지 리퀘스트의 활동 영역에 다음과 같은 메시지 시퀀스가 표시됩니다:

  • (botname)이 5분 전에 이 머지 리퀘스트를 승인했습니다
  • (botname)이 5분 전에 1개의 커밋을 추가했습니다
  • (botname)이 브랜치에 푸시하여 5분 전에 (botname)의 승인을 초기화했습니다

자동화된 승인이 커밋 처리가 완료되기 전에 적용되지 않도록 하려면, 자동화에서 다음 조건이 충족될 때까지 대기(또는 sleep) 함수를 추가해야 합니다:

  • detailed_merge_status 속성이 checking 또는 approvals_syncing 상태가 아닌 경우.
  • 머지 리퀘스트 diff에 NULL이 아닌 patch_id_sha가 포함된 경우.

머지 리퀘스트 승인 취소#

지정된 머지 리퀘스트에서 현재 인증된 사용자의 승인을 제거합니다.

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

지원하는 속성:

속성 타입 필수 여부 설명
id integer 또는 string 프로젝트의 ID 또는 URL 인코딩된 경로.
merge_request_iid integer 머지 리퀘스트의 IID.

머지 리퀘스트 승인 초기화#

지정된 머지 리퀘스트의 모든 승인을 초기화합니다.

유효한 프로젝트 또는 그룹 토큰을 가진 봇 사용자에게만 허용됩니다. 실제 사람 사용자는 401 Unauthorized 응답을 받습니다.

PUT /projects/:id/merge_requests/:merge_request_iid/reset_approvals
속성 타입 필수 여부 설명
id integer 또는 string 프로젝트의 ID 또는 URL 인코딩된 경로.
merge_request_iid integer 머지 리퀘스트의 내부 ID.
curl --request PUT \
  --header "PRIVATE-TOKEN: <your_access_token>" \
  --url "https://gitlab.example.com/api/v4/projects/76/merge_requests/1/reset_approvals"

프로젝트 승인 규칙#

이 엔드포인트는 프로젝트와 해당 승인 규칙에 적용됩니다. 모든 엔드포인트는 인증이 필요합니다.

프로젝트 승인 구성 조회#

프로젝트의 승인 구성을 조회합니다.

GET /projects/:id/approvals

지원하는 속성:

속성 타입 필수 여부 설명
id integer 또는 string 프로젝트의 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, // 16.9에서 더 이상 사용되지 않음, 대신 require_reauthentication_to_approve 사용
  "require_reauthentication_to_approve": true
}

프로젝트 승인 구성 업데이트#

프로젝트의 승인 구성을 업데이트합니다. 현재 인증된 사용자는 승인 가능한 사용자여야 합니다.

POST /projects/:id/approvals

지원하는 속성:

속성 타입 필수 여부 설명
id integer 또는 string 프로젝트의 ID 또는 URL 인코딩된 경로.
approvals_before_merge (더 이상 사용되지 않음) integer 아니오 머지 리퀘스트가 머지되기 전에 필요한 승인 수. GitLab 12.3에서 더 이상 사용되지 않습니다. 대신 승인 규칙 생성을 사용하세요.
disable_overriding_approvers_per_merge_request boolean 아니오 true이면 머지 리퀘스트에서 승인자 재정의를 방지합니다.
merge_requests_author_approval boolean 아니오 true이면 작성자가 자신의 머지 리퀘스트를 자체 승인할 수 있습니다.
merge_requests_disable_committers_approval boolean 아니오 true이면 머지 리퀘스트에 커밋한 사용자는 승인할 수 없습니다.
require_password_to_approve (더 이상 사용되지 않음) boolean 아니오 true이면 승인자가 승인을 추가하기 전에 비밀번호로 인증해야 합니다. GitLab 16.9에서 더 이상 사용되지 않습니다. 대신 require_reauthentication_to_approve를 사용하세요.
require_reauthentication_to_approve boolean 아니오 true이면 승인자가 승인을 추가하기 전에 인증해야 합니다. GitLab 17.1에서 도입되었습니다.
reset_approvals_on_push boolean 아니오 true이면 푸시 시 승인이 초기화됩니다.
selective_code_owner_removals boolean 아니오 true이면 파일이 변경되면 코드 소유자의 승인을 초기화합니다. 이 필드를 사용하려면 reset_approvals_on_pushfalse여야 합니다.
{
  "approvals_before_merge": 2, // 대신 승인 규칙 사용
  "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
}

프로젝트의 모든 승인 규칙 목록 조회#

지정된 프로젝트의 모든 승인 규칙과 관련 세부 정보를 나열합니다.

GET /projects/:id/approval_rules

승인 규칙 목록을 제한하려면 pageper_page 페이지네이션 파라미터를 사용하세요.

지원하는 속성:

속성 타입 필수 여부 설명
id integer 또는 string 프로젝트의 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": "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,
  },
  {
    "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": "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,
  }
]

응답의 각 객체에는 eligible_approvers 배열이 포함됩니다. 이 배열은 해당 규칙이 적용되는 머지 리퀘스트를 승인할 수 있는 사용자 목록입니다. 적격 승인자는 규칙 설정, 프로젝트 및 그룹 멤버십에 따라 달라집니다. 자세한 내용은 적격 승인자를 참조하세요.

프로젝트 승인 규칙 조회#

프로젝트의 지정된 승인 규칙에 대한 정보를 조회합니다.

GET /projects/:id/approval_rules/:approval_rule_id

지원하는 속성:

속성 타입 필수 여부 설명
id integer 또는 string 프로젝트의 ID 또는 URL 인코딩된 경로.
approval_rule_id integer 승인 규칙의 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
}

프로젝트 승인 규칙 생성#

프로젝트에 대한 승인 규칙을 생성합니다.

rule_type 필드는 다음과 같은 규칙 유형을 지원합니다:

  • any_approver: approvals_required0으로 설정된 사전 구성된 기본 규칙.
  • regular: 일반 머지 리퀘스트 승인 규칙에 사용됩니다.
  • report_approver: GitLab이 구성되고 활성화된 머지 리퀘스트 승인 정책에서 승인 규칙을 생성할 때 사용됩니다. 이 API로 승인 규칙을 생성할 때 이 값을 사용하지 마세요.
POST /projects/:id/approval_rules

지원하는 속성:

속성 타입 필수 여부 설명
id integer 또는 string 프로젝트의 ID 또는 URL 인코딩된 경로.
approvals_required integer 이 규칙에 필요한 승인 수.
name string 승인 규칙의 이름. 1024자로 제한됩니다.
applies_to_all_protected_branches boolean 아니오 true이면 규칙을 모든 보호된 브랜치에 적용하고 protected_branch_ids 속성을 무시합니다.
group_ids Array 아니오 승인자로서 그룹의 ID.
protected_branch_ids Array 아니오 규칙 범위를 지정할 보호된 브랜치의 ID. ID를 확인하려면 보호된 브랜치 목록 API를 사용하세요.
report_type string 아니오 보고서 유형. 규칙 유형이 report_approver일 때 필요합니다. 지원하는 보고서 유형은 license_scanning (GitLab 15.9에서 더 이상 사용되지 않음)code_coverage입니다.
rule_type string 아니오 규칙 유형. 지원하는 값은 any_approver, regular, report_approver입니다.
user_ids Array 아니오 승인자로서 사용자의 ID. usernames와 함께 사용하면 두 목록의 사용자가 모두 추가됩니다.
usernames string array 아니오 승인자의 사용자 이름. user_ids와 함께 사용하면 두 목록의 사용자가 모두 추가됩니다.
{
  "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}' \
  --url "https://gitlab.example.com/api/v4/projects/<project_id>/approval_rules"

사용자별 규칙을 생성하는 또 다른 예시:

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"

프로젝트 승인 규칙 업데이트#

프로젝트의 지정된 승인 규칙을 업데이트합니다. 이 엔드포인트는 group_ids, user_ids, 또는 usernames 속성에 정의되지 않은 승인자와 그룹을 제거합니다.

사용자가 볼 권한이 없는 숨겨진 그룹(비공개 그룹)이 users 또는 groups 파라미터에 없는 경우 기본적으로 유지됩니다. 이를 제거하려면 remove_hidden_groupstrue로 설정하세요. 이렇게 하면 사용자가 승인 규칙을 업데이트할 때 숨겨진 그룹이 의도치 않게 제거되지 않습니다.

PUT /projects/:id/approval_rules/:approval_rule_id

지원하는 속성:

속성 타입 필수 여부 설명
approval_rule_id integer 승인 규칙의 ID.
id integer 또는 string 프로젝트의 ID 또는 URL 인코딩된 경로.
applies_to_all_protected_branches boolean 아니오 true이면 규칙을 모든 보호된 브랜치에 적용하고 protected_branch_ids 속성을 무시합니다.
approvals_required integer 아니오 이 규칙에 필요한 승인 수.
group_ids Array 아니오 승인자로서 그룹의 ID.
name string 아니오 승인 규칙의 이름. 1024자로 제한됩니다.
protected_branch_ids Array 아니오 규칙 범위를 지정할 보호된 브랜치의 ID. ID를 확인하려면 보호된 브랜치 목록 API를 사용하세요.
remove_hidden_groups boolean 아니오 true이면 승인 규칙에서 숨겨진 그룹을 제거합니다.
user_ids Array 아니오 승인자로서 사용자의 ID. usernames와 함께 사용하면 두 목록의 사용자가 모두 추가됩니다.
usernames string array 아니오 승인자의 사용자 이름. user_ids와 함께 사용하면 두 목록의 사용자가 모두 추가됩니다.
{
  "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 integer 또는 string 프로젝트의 ID 또는 URL 인코딩된 경로.
approval_rule_id integer 승인 규칙의 ID.

머지 리퀘스트 승인 규칙#

이 엔드포인트는 개별 머지 리퀘스트에 적용됩니다. 모든 엔드포인트는 인증이 필요합니다.

머지 리퀘스트 승인 상태 조회#

지정된 머지 리퀘스트의 승인 상태를 조회합니다.

응답에서 approved_by는 해당 승인이 승인 규칙을 충족하는지 여부에 관계없이 머지 리퀘스트의 모든 승인자에 대한 정보를 포함합니다. 머지 리퀘스트의 승인 규칙과 받은 승인이 해당 규칙을 충족하는지에 대한 더 자세한 정보는 /approval_state 엔드포인트를 참조하세요.

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

지원하는 속성:

속성 타입 필수 여부 설명
id integer 또는 string 프로젝트의 ID 또는 URL 인코딩된 경로.
merge_request_iid integer 머지 리퀘스트의 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"
      },
      "approved_at": "2016-06-09T01:45:21.720Z"
    }
  ]
}

머지 리퀘스트 승인 세부 정보 조회#

지정된 머지 리퀘스트의 승인 세부 정보를 조회합니다.

사용자가 머지 리퀘스트의 승인 규칙을 수정한 경우 응답에 다음이 포함됩니다:

  • approval_rules_overwritten: true이면 기본 승인 규칙이 수정되었음을 나타냅니다.
  • approved: true이면 관련 승인 규칙이 승인되었음을 나타냅니다.
  • approved_by: 정의된 경우 관련 승인 규칙을 승인한 사용자의 세부 정보를 나타냅니다. 승인 규칙과 일치하지 않는 사용자는 반환되지 않습니다. 모든 승인 사용자를 반환하려면 /approvals 엔드포인트를 참조하세요.
GET /projects/:id/merge_requests/:merge_request_iid/approval_state

지원하는 속성:

속성 타입 필수 여부 설명
id integer 또는 string 프로젝트의 ID 또는 URL 인코딩된 경로.
merge_request_iid integer 머지 리퀘스트의 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
    }
  ]
}

머지 리퀘스트의 모든 승인 규칙 목록 조회#

지정된 머지 리퀘스트의 모든 승인 규칙과 관련 세부 정보를 나열합니다.

승인 규칙 목록을 제한하려면 pageper_page 페이지네이션 파라미터를 사용하세요.

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

지원하는 속성:

속성 타입 필수 여부 설명
id integer 또는 string 프로젝트의 ID 또는 URL 인코딩된 경로.
merge_request_iid integer 머지 리퀘스트의 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 integer 또는 string 프로젝트의 ID 또는 URL 인코딩된 경로.
approval_rule_id integer 승인 규칙의 ID.
merge_request_iid integer 머지 리퀘스트의 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로 approval_project_rule_id가 설정된 경우 이 엔드포인트는:

  • 프로젝트 규칙에서 name, users, groups 값을 복사합니다.
  • 지정한 approvals_required 값을 사용합니다.
POST /projects/:id/merge_requests/:merge_request_iid/approval_rules

지원하는 속성:

속성 타입 필수 여부 설명
id integer 또는 string 프로젝트의 ID 또는 URL 인코딩된 경로.
approvals_required integer 이 규칙에 필요한 승인 수.
merge_request_iid integer 머지 리퀘스트의 IID.
name string 승인 규칙의 이름. 1024자로 제한됩니다.
approval_project_rule_id integer 아니오 프로젝트 승인 규칙의 ID.
group_ids Array 아니오 승인자로서 그룹의 ID.
user_ids Array 아니오 승인자로서 사용자의 ID. usernames와 함께 사용하면 두 목록의 사용자가 모두 추가됩니다.
usernames string array 아니오 승인자의 사용자 이름. user_ids와 함께 사용하면 두 목록의 사용자가 모두 추가됩니다.
{
  "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
}

머지 리퀘스트 승인 규칙 업데이트#

머지 리퀘스트의 지정된 승인 규칙을 업데이트합니다. 이 엔드포인트는 group_ids, user_ids, 또는 usernames 속성에 포함되지 않은 승인자와 그룹을 제거합니다.

report_approver 또는 code_owner 규칙은 시스템에서 생성되며 편집할 수 없습니다.

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

지원하는 속성:

속성 타입 필수 여부 설명
id integer 또는 string 프로젝트의 ID 또는 URL 인코딩된 경로.
approval_rule_id integer 승인 규칙의 ID.
merge_request_iid integer 머지 리퀘스트의 IID.
approvals_required integer 아니오 이 규칙에 필요한 승인 수.
group_ids Array 아니오 승인자로서 그룹의 ID.
name string 아니오 승인 규칙의 이름. 1024자로 제한됩니다.
remove_hidden_groups boolean 아니오 true이면 숨겨진 그룹을 제거합니다.
user_ids Array 아니오 승인자로서 사용자의 ID. usernames와 함께 사용하면 두 목록의 사용자가 모두 추가됩니다.
usernames string array 아니오 승인자의 사용자 이름. user_ids와 함께 사용하면 두 목록의 사용자가 모두 추가됩니다.
{
  "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 integer 또는 string 프로젝트의 ID 또는 URL 인코딩된 경로.
approval_rule_id integer 승인 규칙의 ID.
merge_request_iid integer 머지 리퀘스트의 IID.

그룹 승인 규칙#

히스토리
Feature flag

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

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

그룹의 모든 승인 규칙 목록 조회#

히스토리

지정된 그룹의 모든 승인 규칙과 관련 세부 정보를 나열합니다. 그룹 관리자로 제한됩니다.

승인 규칙 목록을 제한하려면 pageper_page 페이지네이션 파라미터를 사용하세요.

GET /groups/:id/approval_rules

지원하는 속성:

속성 타입 필수 여부 설명
id integer 또는 string 프로젝트의 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
  }
]

그룹 승인 규칙 생성#

그룹에 대한 승인 규칙을 생성합니다. 그룹 관리자로 제한됩니다.

API에서 승인 규칙을 빌드할 때 rule_type 필드를 사용하지 마세요. 이 필드는 다음과 같은 규칙 유형을 지원합니다:

POST /groups/:id/approval_rules

지원하는 속성:

속성 타입 필수 여부 설명
id integer 또는 string 그룹의 ID 또는 URL 인코딩된 경로.
approvals_required integer 이 규칙에 필요한 승인 수.
name string 승인 규칙의 이름. 1024자로 제한됩니다.
group_ids array 아니오 승인자로서 그룹의 ID.
rule_type string 아니오 규칙 유형. 지원하는 값은 any_approver, regular, report_approver입니다.
user_ids array 아니오 승인자로서 사용자의 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
}

그룹 승인 규칙 업데이트#

히스토리

그룹의 승인 규칙을 업데이트합니다. 그룹 관리자로 제한됩니다.

API에서 승인 규칙을 빌드할 때 rule_type 필드를 사용하지 마세요. 이 필드는 다음과 같은 규칙 유형을 지원합니다:

PUT /groups/:id/approval_rules/:approval_rule_id

지원하는 속성:

속성 타입 필수 여부 설명
approval_rule_id integer 승인 규칙의 ID.
id integer 또는 string 그룹의 ID 또는 URL 인코딩된 경로.
approvals_required string 아니오 이 규칙에 필요한 승인 수.
group_ids integer 아니오 승인자로서 사용자의 ID.
name string 아니오 승인 규칙의 이름. 1024자로 제한됩니다.
rule_type array 아니오 규칙 유형. 지원하는 값은 any_approver, regular, report_approver입니다.
user_ids array 아니오 승인자로서 그룹의 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
}