- 프로젝트 외부 상태 확인 서비스 가져오기
 - 외부 상태 확인 서비스 생성
 - 외부 상태 확인 서비스 업데이트
 - 외부 상태 확인 서비스 삭제
 - Merge Request의 상태 확인 디렉터리
 - 외부 상태 확인의 상태 설정
 - Merge Request에 실패한 상태 확인 다시 시도
 - 응답
 - 외부 서비스로 전송된 페이로드 예시
 - 관련 주제
 
외부 상태 확인 API
- GitLab 14.0에서 도입됨,
 :ff_external_status_checks피처 플래그 뒤에 비활성화됨.- GitLab 14.1에서 피처 플래그가 제거됨.
 
프로젝트 외부 상태 확인 서비스 가져오기
다음 엔드포인트를 사용하여 프로젝트의 외부 상태 확인 서비스에 대한 정보를 요청할 수 있습니다.
GET /projects/:id/external_status_checks
매개변수:
| 속성 | 유형 | 필수 | 설명 | 
|---|---|---|---|
id
 | integer | yes | 프로젝트 ID | 
[
  {
    "id": 1,
    "name": "컴플라이언스 도구",
    "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
 | integer | yes | 프로젝트 ID | 
name
 | string | yes | 외부 상태 확인 서비스의 표시 이름 | 
external_url
 | string | yes | 외부 상태 확인 서비스의 URL | 
protected_branch_ids
 | array<Integer>
 | no | 규칙을 지정할 보호된 브랜치의 ID들 | 
외부 상태 확인 서비스 업데이트
다음 엔드포인트를 사용하여 프로젝트의 기존 외부 상태 확인 서비스를 업데이트할 수 있습니다.
PUT /projects/:id/external_status_checks/:check_id
| 속성 | 유형 | 필수 | 설명 | 
|---|---|---|---|
id
 | integer | yes | 프로젝트 ID | 
check_id
 | integer | yes | 외부 상태 확인 서비스의 ID | 
name
 | string | no | 외부 상태 확인 서비스의 표시 이름 | 
external_url
 | string | no | 외부 상태 확인 서비스의 URL | 
protected_branch_ids
 | array<Integer>
 | no | 규칙을 지정할 보호된 브랜치의 ID들 | 
외부 상태 확인 서비스 삭제
다음 엔드포인트를 사용하여 프로젝트의 외부 상태 확인 서비스를 삭제할 수 있습니다.
DELETE /projects/:id/external_status_checks/:check_id
| 속성 | 유형 | 필수 | 설명 | 
|---|---|---|---|
check_id
 | integer | yes | 외부 상태 확인 서비스의 ID | 
id
 | integer | yes | 프로젝트 ID | 
Merge Request의 상태 확인 디렉터리
단일 Merge Request에 대한 적용 가능한 외부 상태 확인 서비스 및 그 상태를 나열합니다.
GET /projects/:id/merge_requests/:merge_request_iid/status_checks
매개변수:
| 속성 | 유형 | 필수 | 설명 | 
|---|---|---|---|
id
 | integer | yes | 프로젝트 ID | 
merge_request_iid
 | integer | yes | Merge Request의 IID | 
[
    {
        "id": 2,
        "name": "서비스 1",
        "external_url": "https://gitlab.com/test-endpoint",
        "status": "passed"
    },
    {
        "id": 1,
        "name": "서비스 2",
        "external_url": "https://gitlab.com/test-endpoint-2",
        "status": "pending"
    }
]
외부 상태 확인의 상태 설정
- GitLab 14.9에서 도입됨,
 passed상태는 외부 상태 확인을 통과합니다.status_checks_add_status_field라는 플래그와 함께 도입됨. 기본적으로 비활성화됨.- GitLab 14.9에서 도입됨,
 failed상태는 외부 상태 확인을 실패합니다.status_checks_add_status_field라는 플래그와 함께 도입됨. 기본적으로 비활성화됨.- GitLab 14.9에서
 passed통과 검사를 위해pass상태가 사용 중지되었습니다.passed로 대체되었습니다.- GitLab 15.0에서
 failed및passed의 지원이 기본적으로 활성화되었으며 플래그가 제거되었습니다.- GitLab 16.5에서
 pending지원이 기본적으로 활성화되었습니다.
단일 Merge Request에 대해 외부 서비스의 확인을 통과했다는 정보를 GitLab에 알리기 위해 API를 사용합니다. 외부 확인의 상태를 설정하려면 사용된 개인 액세스 토큰은 적어도 Merge Request의 대상 프로젝트에서 Developer 역할을 가진 사용자에게 속해야 합니다.
이 API 호출은 Merge Request 자체를 승인할 수 있는 권한을 가진 모든 사용자로 실행합니다.
POST /projects/:id/merge_requests/:merge_request_iid/status_check_responses
매개변수:
| 속성 | 유형 | 필수 | 설명 | 
|---|---|---|---|
id
 | integer | yes | 프로젝트 ID | 
merge_request_iid
 | integer | yes | Merge Request의 IID | 
sha
 | string | yes | 소스 브랜치의 HEAD의 SHA
 | 
external_status_check_id
 | integer | yes | 외부 상태 확인의 ID | 
status
 | string | no | 
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
 | integer | yes | 프로젝트 ID | 
merge_request_iid
 | integer | yes | Merge Request ID | 
external_status_check_id
 | integer | yes | 실패한 외부 상태 확인 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": "[REDACTED]"
  },
  "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/"
  }
}
도움말