머지 리퀘스트 승인 API
Offering: GitLab.com, GitLab Self-Managed, GitLab Dedicated
이 API를 사용하여 머지 리퀘스트 승인을 관리할 수 있습니다. 모든 엔드포인트는 인증이 필요합니다. 지정된 머지 리퀘스트를 승인합니다. sha 파라미터는 현재 버전의 머지 리퀘스트를 승인하고 있음을 보장합니다. API를 사용하여 머지 리퀘스트를 생성하고 즉시 승인하는 경우, 커밋이 완전히 처리되기 전에 자동화가 머지 리퀘스트를 승인할 수 있습니다.
히스토리
- GitLab 16.0에서 엔드포인트
/approvals가 제거되었습니다.
이 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_push가 false여야 합니다. |
{
"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
승인 규칙 목록을 제한하려면 page 및 per_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_required가0으로 설정된 사전 구성된 기본 규칙.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_groups를 true로 설정하세요.
이렇게 하면 사용자가 승인 규칙을 업데이트할 때 숨겨진 그룹이 의도치 않게 제거되지 않습니다.
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
}
]
}
머지 리퀘스트의 모든 승인 규칙 목록 조회#
지정된 머지 리퀘스트의 모든 승인 규칙과 관련 세부 정보를 나열합니다.
승인 규칙 목록을 제한하려면 page 및 per_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. |
그룹 승인 규칙#
GitLab Self-Managed에서는 기본적으로 이 기능을 사용할 수 없습니다. 관리자가 approval_group_rules라는 기능 플래그를 활성화할 수 있습니다.
GitLab.com 및 GitLab Dedicated에서는 이 기능을 사용할 수 없습니다.
이 기능은 프로덕션 사용 준비가 되어 있지 않습니다.
그룹 승인 규칙은 그룹에 속한 프로젝트의 모든 보호된 브랜치에 적용됩니다.
그룹의 모든 승인 규칙 목록 조회#
히스토리
- GitLab 16.10에서 도입되었습니다.
지정된 그룹의 모든 승인 규칙과 관련 세부 정보를 나열합니다. 그룹 관리자로 제한됩니다.
승인 규칙 목록을 제한하려면 page 및 per_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 필드를 사용하지 마세요. 이 필드는 다음과 같은 규칙 유형을 지원합니다:
any_approver:approvals_required가0으로 설정된 사전 구성된 기본 규칙.regular: 일반 머지 리퀘스트 승인 규칙에 사용됩니다.report_approver: GitLab이 구성되고 활성화된 머지 리퀘스트 승인 정책에서 승인 규칙을 생성할 때 사용됩니다.
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
}
그룹 승인 규칙 업데이트#
히스토리
- GitLab 16.10에서 도입되었습니다.
그룹의 승인 규칙을 업데이트합니다. 그룹 관리자로 제한됩니다.
API에서 승인 규칙을 빌드할 때 rule_type 필드를 사용하지 마세요. 이 필드는 다음과 같은 규칙 유형을 지원합니다:
any_approver:approvals_required가0으로 설정된 사전 구성된 기본 규칙.regular: 일반 머지 리퀘스트 승인 규칙에 사용됩니다.report_approver: GitLab이 구성되고 활성화된 머지 리퀘스트 승인 정책에서 승인 규칙을 생성할 때 사용됩니다.
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
}
