外部パイプラインの検証
外部サービスを使用して、パイプラインを作成する前に検証することができます。
GitLabはパイプラインデータをペイロードとして外部サービスのURLにPOSTリクエストを送信します。外部サービスからのレスポンスコードによって、GitLabがパイプラインを受け入れるべきか拒否すべきかが決まります。レスポンスが
-
200
であれば、パイプラインは受け入れられます。 -
406
パイプラインは拒否されます。 - その他のコードでは、パイプラインは受け入れられ、ログに記録されます。
エラーやリクエストがタイムアウトした場合、パイプラインは受け付けられます。
外部の検証サービスによって拒否されたパイプラインは作成されず、GitLab UIやAPIのパイプラインリストにも表示されません。UI で作成したパイプラインが拒否された場合、Pipeline cannot be run. External validation failed
が表示されます。
外部パイプライン検証の設定
外部パイプラインバリデーションを設定するには、EXTERNAL_VALIDATION_SERVICE_URL
環境変数 を追加し、外部サービスの URL に設定します。
デフォルトでは、外部サービスへのリクエストは5秒後にタイムアウトします。デフォルトをオーバーライドするには、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",
"services",
"script"
],
"properties": {
"name": { "type": "string" },
"stage": { "type": "string" },
"image": { "type": ["string", "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でのみ利用可能です。