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