외부 상태 확인 API

Tier: Ultimate Offering: GitLab.com, Self-managed, GitLab Dedicated

프로젝트 외부 상태 확인 서비스 가져오기

다음 엔드포인트를 사용하여 프로젝트의 외부 상태 확인 서비스에 대한 정보를 요청할 수 있습니다.

GET /projects/:id/external_status_checks

파라미터:

속성 유형 필수 설명
id integer yes 프로젝트 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 integer yes 프로젝트 ID
name string yes 외부 상태 확인 서비스의 표시 이름
external_url string yes 외부 상태 확인 서비스의 URL
shared_secret string no 외부 상태 확인을 위한 HMAC 비밀
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
shared_secret string no 외부 상태 확인을 위한 HMAC 비밀
protected_branch_ids array<Integer> no 규칙을 적용할 보호되는 브랜치의 ID들

외부 상태 확인 서비스 삭제

다음 엔드포인트를 사용하여 프로젝트의 외부 상태 확인 서비스를 삭제할 수 있습니다.

DELETE /projects/:id/external_status_checks/:check_id
속성 유형 필수 설명
check_id integer yes 외부 상태 확인 서비스의 ID
id integer yes 프로젝트 ID

병합 요청에 대한 상태 확인 목록

단일 병합 요청에 대해 적용되는 외부 상태 확인 서비스 및 그 상태를 나열합니다.

GET /projects/:id/merge_requests/:merge_request_iid/status_checks

파라미터:

속성 유형 필수 설명
id integer yes 프로젝트 ID
merge_request_iid integer yes 병합 요청의 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에 알리기 위해 API를 사용합니다. 외부 확인의 상태를 설정하려면 사용된 개인 액세스 토큰은 최소한 병합 요청의 대상 프로젝트에 대해 개발자 역할을 가진 사용자에게 속해 있어야 합니다.

이 API 호출을 병합 요청 자체를 승인할 권한이 있는 모든 사용자로서 실행하세요.

POST /projects/:id/merge_requests/:merge_request_iid/status_check_responses

파라미터:

속성 유형 필수 설명
id integer yes 프로젝트 ID
merge_request_iid integer yes 병합 요청의 IID
sha string yes 소스 브랜치의 HEAD에서의 SHA
external_status_check_id integer yes 외부 상태 확인의 ID
status string no 확인을 보류로 표시하려면 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 yes 프로젝트 ID
merge_request_iid integer yes 병합 요청의 IID
external_status_check_id integer yes 실패한 외부 상태 확인의 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": "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/"
  }
}

관련 주제