- 프로젝트 외부 상태 확인 서비스 가져오기
- 외부 상태 확인 서비스 만들기
- 외부 상태 확인 서비스 업데이트
- 외부 상태 확인 서비스 삭제
- 병합 요청의 상태 확인 목록
- 외부 상태 체크의 상태 설정
- 병합 요청에 대한 실패한 상태 체크 재시도
- 응답
- 외부 서비스에 전송된 예제 페이로드
- 관련 주제
외부 상태 확인 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",
"hmac": true,
"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 |
shared_secret |
문자열 | 아니오 | 외부 상태 확인을 위한 HMAC 비밀키 |
protected_branch_ids |
array<Integer> |
아니오 | 규칙을 범위 지정하기 위한 보호된 브랜치 ID |
외부 상태 확인 서비스 업데이트
다음 엔드포인트를 사용하여 프로젝트의 기존 외부 상태 확인을 업데이트할 수 있습니다:
PUT /projects/:id/external_status_checks/:check_id
속성 | 유형 | 필수 | 설명 |
---|---|---|---|
id |
정수 | 예 | 프로젝트 ID |
check_id |
정수 | 예 | 외부 상태 확인 서비스의 ID |
name |
문자열 | 아니오 | 외부 상태 확인 서비스의 표시 이름 |
external_url |
문자열 | 아니오 | 외부 상태 확인 서비스의 URL |
shared_secret |
문자열 | 아니오 | 외부 상태 확인을 위한 HMAC 비밀키 |
protected_branch_ids |
array<Integer> |
아니오 | 규칙을 범위 지정하기 위한 보호된 브랜치 ID |
외부 상태 확인 서비스 삭제
다음 엔드포인트를 사용하여 프로젝트의 외부 상태 확인 서비스를 삭제할 수 있습니다:
DELETE /projects/:id/external_status_checks/:check_id
속성 | 유형 | 필수 | 설명 |
---|---|---|---|
check_id |
정수 | 예 | 외부 상태 확인 서비스의 ID |
id |
정수 | 예 | 프로젝트 ID |
병합 요청의 상태 확인 목록
단일 병합 요청에 대해 적용되는 외부 상태 확인 서비스와 그 상태를 나열합니다.
GET /projects/:id/merge_requests/:merge_request_iid/status_checks
매개변수:
속성 | 유형 | 필수 | 설명 |
---|---|---|---|
id |
integer | 예 | 프로젝트의 ID |
merge_request_iid |
integer | 예 | 병합 요청의 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"
}
]
외부 상태 체크의 상태 설정
단일 병합 요청에 대해 API를 사용하여 외부 서비스가 체크를 통과했음을 GitLab에 알립니다.
외부 체크의 상태를 설정하려면 사용되는 개인 액세스 토큰이 병합 요청의 대상 프로젝트에서 최소한 개발자 역할을 가진 사용자에 속해야 합니다.
병합 요청 자체를 승인할 수 있는 권한이 있는 사용자로 이 API 호출을 실행하십시오.
POST /projects/:id/merge_requests/:merge_request_iid/status_check_responses
매개변수:
속성 | 유형 | 필수 | 설명 |
---|---|---|---|
id |
integer | 예 | 프로젝트의 ID |
merge_request_iid |
integer | 예 | 병합 요청의 IID |
sha |
string | 예 | 소스 브랜치의 HEAD 에서의 SHA |
external_status_check_id |
integer | 예 | 외부 상태 체크의 ID |
status |
string | 아니오 | 체크를 보류 상태로 표시하려면 pending , 체크를 통과시키려면 passed , 실패로 표시하려면 failed 로 설정 |
참고:
sha
는 병합 요청의 소스 브랜치에서 HEAD
의 SHA여야 합니다.
병합 요청에 대한 실패한 상태 체크 재시도
- GitLab 15.7에서 도입됨.
단일 병합 요청에 대해 지정된 실패한 외부 상태 체크를 재시도합니다. 병합 요청이 변경되지 않았더라도 이 엔드포인트는 병합 요청의 현재 상태를 정의된 외부 서비스로 다시 전송합니다.
POST /projects/:id/merge_requests/:merge_request_iid/status_checks/:external_status_check_id/retry
매개변수:
속성 | 유형 | 필수 | 설명 |
---|---|---|---|
id |
integer | 예 | 프로젝트의 ID |
merge_request_iid |
integer | 예 | 병합 요청의 IID |
external_status_check_id |
integer | 예 | 실패한 외부 상태 체크의 ID |
응답
성공 상태 코드의 경우 202입니다.
{
"message": "202 Accepted"
}
상태 검사가 이미 통과된 경우 상태 코드 422입니다.
{
"message": "External status check must be failed"
}
외부 서비스에 전송된 예제 페이로드
{
"object_kind": "merge_request",
"event_type": "merge_request",
"user": {
"id": 1,
"name": "관리자",
"username": "root",
"avatar_url": "https://www.gravatar.com/avatar/e64c7d89f26bd1972efa854d13d7dd61?s=80&d=identicon",
"email": "[REDACTED]"
},
"project": {
"id": 6,
"name": "Flight",
"description": "Ipsa minima est consequunturquisquam.",
"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": "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": "README.md 업데이트",
"title": "README.md 업데이트",
"timestamp": "2022-12-07T07:52:11+00:00",
"url": "http://example.com/flightjs/Flight/-/commit/141be9714669a4c1ccaa013c6a7f3e462ff2a40f",
"author": {
"name": "관리자",
"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/"
}
}