- 프로젝트 외부 상태 확인 서비스 가져오기
- 외부 상태 확인 서비스 만들기
- 외부 상태 확인 서비스 업데이트
- 외부 상태 확인 서비스 삭제
- Merge Request의 상태 확인 디렉터리
- 외부 상태 확인의 상태 설정
- Merge Request의 실패한 상태 확인 재시도
- 응답
- 외부 서비스에 전송된 예시 페이로드
- 관련 주제
External Status Checks API
프로젝트 외부 상태 확인 서비스 가져오기
다음 엔드포인트를 사용하여 프로젝트의 외부 상태 확인 서비스에 대한 정보를 요청할 수 있습니다:
GET /projects/:id/external_status_checks
매개변수:
속성 | 유형 | 필수 여부 | 설명 |
---|---|---|---|
id
| 정수 | 예 | 프로젝트 ID |
[
{
"id": 1,
"name": "Compliance Tool",
"project_id": 6,
"external_url": "https://gitlab.com/example/compliance-tool",
"protected_branches": [
{
"id": 14,
"project_id": 6,
"name": "main",
"created_at": "2020-10-12T14:04:50.787Z",
"updated_at": "2020-10-12T14:04:50.787Z",
"code_owner_approval_required": false
}
]
}
]
외부 상태 확인 서비스 만들기
다음 엔드포인트를 사용하여 프로젝트에 새로운 외부 상태 확인 서비스를 만들 수 있습니다:
POST /projects/:id/external_status_checks
속성 | 유형 | 필수 여부 | 설명 |
---|---|---|---|
id
| 정수 | 예 | 프로젝트 ID |
name
| 문자열 | 예 | 외부 상태 확인 서비스의 표시 이름 |
external_url
| 문자열 | 예 | 외부 상태 확인 서비스의 URL |
protected_branch_ids
| array<Integer>
| 아니요 | 적용 범위를 지정하기 위한 보호된 브랜치의 ID |
외부 상태 확인 서비스 업데이트
다음 엔드포인트를 사용하여 프로젝트의 기존 외부 상태 확인 서비스를 업데이트할 수 있습니다:
PUT /projects/:id/external_status_checks/:check_id
속성 | 유형 | 필수 여부 | 설명 |
---|---|---|---|
id
| 정수 | 예 | 프로젝트 ID |
check_id
| 정수 | 예 | 외부 상태 확인 서비스의 ID |
name
| 문자열 | 아니요 | 외부 상태 확인 서비스의 표시 이름 |
external_url
| 문자열 | 아니요 | 외부 상태 확인 서비스의 URL |
protected_branch_ids
| array<Integer>
| 아니요 | 적용 범위를 지정하기 위한 보호된 브랜치의 ID |
외부 상태 확인 서비스 삭제
다음 엔드포인트를 사용하여 프로젝트의 외부 상태 확인 서비스를 삭제할 수 있습니다:
DELETE /projects/:id/external_status_checks/:check_id
속성 | 유형 | 필수 여부 | 설명 |
---|---|---|---|
check_id
| 정수 | 예 | 외부 상태 확인 서비스의 ID |
id
| 정수 | 예 | 프로젝트 ID |
Merge Request의 상태 확인 디렉터리
단일 Merge Request에 대해 적용되는 외부 상태 확인 서비스 및 상태를 나열합니다.
GET /projects/:id/merge_requests/:merge_request_iid/status_checks
매개변수:
속성 | 유형 | 필수 여부 | 설명 |
---|---|---|---|
id
| 정수 | 예 | 프로젝트 ID |
merge_request_iid
| 정수 | 예 | Merge Request의 IID |
[
{
"id": 2,
"name": "Service 1",
"external_url": "https://gitlab.com/test-endpoint",
"status": "passed"
},
{
"id": 1,
"name": "Service 2",
"external_url": "https://gitlab.com/test-endpoint-2",
"status": "pending"
}
]
외부 상태 확인의 상태 설정
- GitLab 15.0에서 기본으로 활성화된
failed
및passed
지원- GitLab 16.5에서
pending
을 기본으로 활성화된 상태 지원
단일 Merge Request에 대해 외부 서비스의 확인을 통과했음을 GitLab에 알리기 위해 API를 사용합니다. 외부 확인의 상태를 설정하려면 사용된 개인 액세스 토큰이 Merge Request의 대상 프로젝트에 대해 적어도 개발자 역할을 가진 사용자에게 속해야 합니다.
이 API 호출은 Merge Request 자체를 승인할 수 있는 모든 사용자로 실행합니다.
POST /projects/:id/merge_requests/:merge_request_iid/status_check_responses
매개변수:
속성 | 유형 | 필수 여부 | 설명 |
---|---|---|---|
id
| 정수 | 예 | 프로젝트 ID |
merge_request_iid
| 정수 | 예 | Merge Request의 IID |
sha
| 문자열 | 예 | 소스 브랜치의 HEAD 에서의 SHA
|
external_status_check_id
| 정수 | 예 | 외부 상태 확인의 ID |
status
| 문자열 | 아니요 | 상태를 pending 로 설정하면 확인을 보류로 표시, passed 로 설정하면 확인을 통과로 표시, failed 로 설정하면 확인을 실패로 표시
|
sha
는 Merge Request의 소스 브랜치의 HEAD
에서 가져온 SHA여야 합니다.Merge Request의 실패한 상태 확인 재시도
- GitLab 15.7에서 도입
단일 Merge Request에 대해 지정된 실패한 외부 상태 확인을 재시도합니다. Merge Request이 변경되지 않았더라도 이 엔드포인트는 현재의 Merge Request 상태를 정의된 외부 서비스에 다시 전송합니다.
POST /projects/:id/merge_requests/:merge_request_iid/status_checks/:external_status_check_id/retry
매개변수:
속성 | 유형 | 필수 여부 | 설명 |
---|---|---|---|
id
| 정수 | 예 | 프로젝트 ID |
merge_request_iid
| 정수 | 예 | Merge Request의 IID |
external_status_check_id
| 정수 | 예 | 실패한 외부 상태 확인의 ID |
응답
성공 시 상태 코드는 202입니다.
{
"message": "202 Accepted"
}
상태 확인이 이미 통과된 경우 상태 코드는 422입니다.
{
"message": "외부 상태 확인이 실패해야 합니다"
}
외부 서비스에 전송된 예시 페이로드
{
"object_kind": "merge_request",
"event_type": "merge_request",
"user": {
"id": 1,
"name": "Administrator",
"username": "root",
"avatar_url": "https://www.gravatar.com/avatar/e64c7d89f26bd1972efa854d13d7dd61?s=80&d=identicon",
"email": "[레드액트됨]"
},
"project": {
"id": 6,
"name": "Flight",
"description": "Ipsa minima est consequuntur quisquam.",
"web_url": "http://example.com/flightjs/Flight",
"avatar_url": null,
"git_ssh_url": "ssh://example.com/flightjs/Flight.git",
"git_http_url": "http://example.com/flightjs/Flight.git",
"namespace": "Flightjs",
"visibility_level": 20,
"path_with_namespace": "flightjs/Flight",
"default_branch": "main",
"ci_config_path": null,
"homepage": "http://example.com/flightjs/Flight",
"url": "ssh://example.com/flightjs/Flight.git",
"ssh_url": "ssh://example.com/flightjs/Flight.git",
"http_url": "http://example.com/flightjs/Flight.git"
},
"object_attributes": {
"assignee_id": null,
"author_id": 1,
"created_at": "2022-12-07 07:53:43 UTC",
"description": "",
"head_pipeline_id": 558,
"id": 144,
"iid": 4,
"last_edited_at": null,
"last_edited_by_id": null,
"merge_commit_sha": null,
"merge_error": null,
"merge_params": {
"force_remove_source_branch": "1"
},
"merge_status": "can_be_merged",
"merge_user_id": null,
"merge_when_pipeline_succeeds": false,
"milestone_id": null,
"source_branch": "root-main-patch-30152",
"source_project_id": 6,
"state_id": 1,
"target_branch": "main",
"target_project_id": 6,
"time_estimate": 0,
"title": "Update README.md",
"updated_at": "2022-12-07 07:53:43 UTC",
"updated_by_id": null,
"url": "http://example.com/flightjs/Flight/-/merge_requests/4",
"source": {
"id": 6,
"name": "Flight",
"description": "Ipsa minima est consequuntur quisquam.",
"web_url": "http://example.com/flightjs/Flight",
"avatar_url": null,
"git_ssh_url": "ssh://example.com/flightjs/Flight.git",
"git_http_url": "http://example.com/flightjs/Flight.git",
"namespace": "Flightjs",
"visibility_level": 20,
"path_with_namespace": "flightjs/Flight",
"default_branch": "main",
"ci_config_path": null,
"homepage": "http://example.com/flightjs/Flight",
"url": "ssh://example.com/flightjs/Flight.git",
"ssh_url": "ssh://example.com/flightjs/Flight.git",
"http_url": "http://example.com/flightjs/Flight.git"
},
"target": {
"id": 6,
"name": "Flight",
"description": "Ipsa minima est consequuntur quisquam.",
"web_url": "http://example.com/flightjs/Flight",
"avatar_url": null,
"git_ssh_url": "ssh://example.com/flightjs/Flight.git",
"git_http_url": "http://example.com/flightjs/Flight.git",
"namespace": "Flightjs",
"visibility_level": 20,
"path_with_namespace": "flightjs/Flight",
"default_branch": "main",
"ci_config_path": null,
"homepage": "http://example.com/flightjs/Flight",
"url": "ssh://example.com/flightjs/Flight.git",
"ssh_url": "ssh://example.com/flightjs/Flight.git",
"http_url": "http://example.com/flightjs/Flight.git"
},
"last_commit": {
"id": "141be9714669a4c1ccaa013c6a7f3e462ff2a40f",
"message": "Update README.md",
"title": "Update README.md",
"timestamp": "2022-12-07T07:52:11+00:00",
"url": "http://example.com/flightjs/Flight/-/commit/141be9714669a4c1ccaa013c6a7f3e462ff2a40f",
"author": {
"name": "Administrator",
"email": "admin@example.com"
}
},
"work_in_progress": false,
"total_time_spent": 0,
"time_change": 0,
"human_total_time_spent": null,
"human_time_change": null,
"human_time_estimate": null,
"assignee_ids": [
],
"reviewer_ids": [
],
"labels": [
],
"state": "opened",
"blocking_discussions_resolved": true,
"first_contribution": false,
"detailed_merge_status": "mergeable"
},
"labels": [
],
"changes": {
},
"repository": {
"name": "Flight",
"url": "ssh://example.com/flightjs/Flight.git",
"description": "Ipsa minima est consequuntur quisquam.",
"homepage": "http://example.com/flightjs/Flight"
},
"external_approval_rule": {
"id": 1,
"name": "QA",
"external_url": "https://example.com/"
}
}