2020-05-29 18:08:26 +00:00
---
stage: Verify
group: Continuous Integration
2020-11-26 06:09:20 +00:00
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#assignments
2020-05-29 18:08:26 +00:00
type: reference, howto
---
2019-12-14 09:07:51 +00:00
# External Pipeline Validation
You can use an external service for validating a pipeline before it's created.
2020-12-04 21:09:29 +00:00
WARNING:
2019-12-14 09:07:51 +00:00
This is an experimental feature and subject to change without notice.
## Usage
2020-11-18 18:09:08 +00:00
GitLab sends a POST request to the external service URL with the pipeline
data as payload. GitLab then invalidates the pipeline based on the response
code. If there's an error or the request times out, the pipeline is not
2019-12-14 09:07:51 +00:00
invalidated.
Response Code Legend:
- `200` - Accepted
2021-03-23 12:09:33 +00:00
- `406` - Not Accepted
2019-12-14 09:07:51 +00:00
- Other Codes - Accepted and Logged
## Configuration
2021-03-30 09:10:51 +00:00
To configure external pipeline validation:
1. Set the `EXTERNAL_VALIDATION_SERVICE_URL` environment variable to the external
service URL.
1. Enable the `ci_external_validation_service` feature flag.
By default, requests to the external service time out after five seconds. To override
the default, set the `EXTERNAL_VALIDATION_SERVICE_TIMEOUT` environment variable to the
required number of seconds.
2019-12-14 09:07:51 +00:00
## Payload Schema
```json
{
"type": "object",
"required" : [
"project",
"user",
"pipeline",
2021-03-23 18:09:05 +00:00
"builds",
"namespace"
2019-12-14 09:07:51 +00:00
],
"properties" : {
"project": {
"type": "object",
"required": [
"id",
2021-03-23 18:09:05 +00:00
"path",
"created_at"
2019-12-14 09:07:51 +00:00
],
"properties": {
"id": { "type": "integer" },
2021-03-23 18:09:05 +00:00
"path": { "type": "string" },
"created_at": { "type": ["string", "null"], "format": "date-time" }
2019-12-14 09:07:51 +00:00
}
},
"user": {
"type": "object",
"required": [
"id",
"username",
2021-03-23 18:09:05 +00:00
"email",
"created_at"
2019-12-14 09:07:51 +00:00
],
"properties": {
"id": { "type": "integer" },
"username": { "type": "string" },
2021-03-23 18:09:05 +00:00
"email": { "type": "string" },
"created_at": { "type": ["string", "null"], "format": "date-time" }
2019-12-14 09:07:51 +00:00
}
},
"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" }
}
}
}
2021-03-23 18:09:05 +00:00
},
"namespace": {
"type": "object",
"required": [
"plan",
"trial"
],
"properties": {
"plan": { "type": "string" },
"trial": { "type": "boolean" }
}
2019-12-14 09:07:51 +00:00
}
2021-03-23 18:09:05 +00:00
}
2019-12-14 09:07:51 +00:00
}
```