외부 파이프라인 유효성 검사

Tier: Free, Premium, Ultimate Offering: Self-Managed

파이프라인이 만들어지기 전에 외부 서비스를 사용하여 파이프라인을 유효성 검사할 수 있습니다.

GitLab은 파이프라인 데이터를 페이로드로 사용하여 외부 서비스 URL로 POST 요청을 보냅니다. 외부 서비스로부터의 응답 코드에 따라 GitLab이 파이프라인을 수락할 지 거부할 지가 결정됩니다. 응답이:

  • 200이면 파이프라인이 수락됩니다.
  • 406이면 파이프라인이 거부됩니다.
  • 기타 코드는 파이프라인을 수락하고 로깅합니다.

오류가 발생하거나 요청이 시간 초과되면 파이프라인은 수락됩니다.

외부 유효성 검사 서비스에 의해 거부된 파이프라인은 생성되지 않으며 GitLab UI나 API의 파이프라인 디렉터리에 표시되지 않습니다. UI에서 거부된 파이프라인을 만들 경우, 파이프라인을 실행할 수 없습니다. 외부 유효성 검사 실패가 표시됩니다.

외부 파이프라인 유효성 검사 구성

외부 파이프라인 유효성 검사를 구성하려면 EXTERNAL_VALIDATION_SERVICE_URL 환경 변수를 추가하고 외부 서비스 URL로 설정하면 됩니다.

기본적으로 외부 서비스로의 요청은 다섯 초 후에 시간초과됩니다. 기본 설정을 재정의하려면 EXTERNAL_VALIDATION_SERVICE_TIMEOUT 환경 변수를 필요한 초 단위로 설정하면 됩니다.

페이로드 스키마

{
  "type": "object",
  "required" : [
    "project",
    "user",
    "credit_card",
    "pipeline",
    "builds",
    "total_builds_count",
    "namespace"
  ],
  "properties" : {
    "project": {
      "type": "object",
      "required": [
        "id",
        "path",
        "created_at",
        "shared_runners_enabled",
        "group_runners_enabled"
      ],
      "properties": {
        "id": { "type": "integer" },
        "path": { "type": "string" },
        "created_at": { "type": ["string", "null"], "format": "date-time" },
        "shared_runners_enabled": { "type": "boolean" },
        "group_runners_enabled": { "type": "boolean" }
      }
    },
    "user": {
      "type": "object",
      "required": [
        "id",
        "username",
        "email",
        "created_at"
      ],
      "properties": {
        "id": { "type": "integer" },
        "username": { "type": "string" },
        "email": { "type": "string" },
        "created_at": { "type": ["string", "null"], "format": "date-time" },
        "current_sign_in_ip": { "type": ["string", "null"] },
        "last_sign_in_ip": { "type": ["string", "null"] },
        "sign_in_count": { "type": "integer" }
      }
    },
    "credit_card": {
      "type": "object",
      "required": [
        "similar_cards_count",
        "similar_holder_names_count"
      ],
      "properties": {
        "similar_cards_count": { "type": "integer" },
        "similar_holder_names_count": { "type": "integer" }
      }
    },
    "pipeline": {
      "type": "object",
      "required": [
        "sha",
        "ref",
        "type"
      ],
      "properties": {
        "sha": { "type": "string" },
        "ref": { "type": "string" },
        "type": { "type": "string" }
      }
    },
    "builds": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "name",
          "stage",
          "image",
          "tag_list",
          "services",
          "script"
        ],
        "properties": {
          "name": { "type": "string" },
          "stage": { "type": "string" },
          "image": { "type": ["string", "null"] },
          "tag_list": { "type": ["array", "null"] },
          "services": {
            "type": ["array", "null"],
            "items": { "type": "string" }
          },
          "script": {
            "type": "array",
            "items": { "type": "string" }
          }
        }
      }
    },
    "total_builds_count": { "type": "integer" },
    "namespace": {
      "type": "object",
      "required": [
        "plan",
        "trial"
      ],
      "properties": {
        "plan": { "type": "string" },
        "trial": { "type": "boolean" }
      }
    },
    "provisioning_group": {
      "type": "object",
      "required": [
        "plan",
        "trial"
      ],
      "properties": {
        "plan": { "type": "string" },
        "trial": { "type": "boolean" }
      }
    }
  }
}

namespace 필드는 GitLab Premium 및 Ultimate에서만 사용할 수 있습니다.