2017-03-06 04:24:03 -05:00
# Jobs API
2016-01-05 10:36:14 -05:00
2017-03-06 10:56:05 -05:00
## List project jobs
2016-01-05 10:36:14 -05:00
2019-12-11 07:08:10 -05:00
Get a list of jobs in a project. Jobs are sorted in descending order of their IDs.
2016-01-05 10:36:14 -05:00
2020-02-27 04:09:01 -05:00
```plaintext
2017-03-06 04:24:03 -05:00
GET /projects/:id/jobs
2016-01-05 10:36:14 -05:00
```
2018-12-05 05:08:39 -05:00
| Attribute | Type | Required | Description |
|-----------|--------------------------------|----------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
2019-03-06 06:06:21 -05:00
| `id` | integer/string | yes | ID or [URL-encoded path of the project ](README.md#namespaced-path-encoding ) owned by the authenticated user. |
2018-12-05 05:08:39 -05:00
| `scope` | string **or** array of strings | no | Scope of jobs to show. Either one of or an array of the following: `created` , `pending` , `running` , `failed` , `success` , `canceled` , `skipped` , or `manual` . All jobs are returned if `scope` is not provided. |
2016-01-13 15:19:18 -05:00
2020-01-30 10:09:15 -05:00
```shell
2020-05-27 20:08:37 -04:00
curl --globoff --header "PRIVATE-TOKEN: < your_access_token > " "https://gitlab.example.com/api/v4/projects/1/jobs?scope[]=pending& scope[]=running"
2016-01-13 15:19:18 -05:00
```
2016-02-10 08:31:30 -05:00
Example of response
2016-01-05 10:36:14 -05:00
2017-03-06 10:56:05 -05:00
```json
[
{
"commit": {
"author_email": "admin@example.com",
"author_name": "Administrator",
"created_at": "2015-12-24T16:51:14.000+01:00",
"id": "0ff3ae198f8601a285adcf5c0fff204ee6fba5fd",
"message": "Test the CI integration.",
"short_id": "0ff3ae19",
"title": "Test the CI integration."
},
"coverage": null,
2019-05-21 05:21:53 -04:00
"allow_failure": false,
2019-12-11 07:08:10 -05:00
"created_at": "2015-12-24T15:51:21.802Z",
"started_at": "2015-12-24T17:54:27.722Z",
"finished_at": "2015-12-24T17:54:27.895Z",
"duration": 0.173,
"artifacts_file": {
"filename": "artifacts.zip",
"size": 1000
},
"artifacts": [
{"file_type": "archive", "size": 1000, "filename": "artifacts.zip", "file_format": "zip"},
{"file_type": "metadata", "size": 186, "filename": "metadata.gz", "file_format": "gzip"},
{"file_type": "trace", "size": 1500, "filename": "job.log", "file_format": "raw"},
{"file_type": "junit", "size": 750, "filename": "junit.xml.gz", "file_format": "gzip"}
],
"artifacts_expire_at": "2016-01-23T17:54:27.895Z",
"id": 7,
"name": "teaspoon",
2017-03-06 10:56:05 -05:00
"pipeline": {
"id": 6,
"ref": "master",
"sha": "0ff3ae198f8601a285adcf5c0fff204ee6fba5fd",
"status": "pending"
},
"ref": "master",
2018-07-18 17:46:56 -04:00
"artifacts": [],
2017-03-06 10:56:05 -05:00
"runner": null,
"stage": "test",
"status": "failed",
"tag": false,
2019-12-11 07:08:10 -05:00
"web_url": "https://example.com/foo/bar/-/jobs/7",
2017-03-06 10:56:05 -05:00
"user": {
"id": 1,
"name": "Administrator",
"username": "root",
2018-09-25 10:28:57 -04:00
"state": "active",
"avatar_url": "http://www.gravatar.com/avatar/e64c7d89f26bd1972efa854d13d7dd61?s=80& d=identicon",
2017-03-06 10:56:05 -05:00
"web_url": "http://gitlab.dev/root",
2018-09-25 10:28:57 -04:00
"created_at": "2015-12-21T13:14:24.077Z",
"bio": null,
"location": null,
2018-09-25 12:40:24 -04:00
"public_email": "",
2018-09-25 10:28:57 -04:00
"skype": "",
"linkedin": "",
"twitter": "",
"website_url": "",
"organization": ""
2017-03-06 10:56:05 -05:00
}
},
{
"commit": {
"author_email": "admin@example.com",
"author_name": "Administrator",
"created_at": "2015-12-24T16:51:14.000+01:00",
"id": "0ff3ae198f8601a285adcf5c0fff204ee6fba5fd",
"message": "Test the CI integration.",
"short_id": "0ff3ae19",
"title": "Test the CI integration."
},
"coverage": null,
2019-05-21 05:21:53 -04:00
"allow_failure": false,
2019-12-11 07:08:10 -05:00
"created_at": "2015-12-24T15:51:21.727Z",
"started_at": "2015-12-24T17:54:24.729Z",
"finished_at": "2015-12-24T17:54:24.921Z",
"duration": 0.192,
"artifacts_expire_at": "2016-01-23T17:54:24.921Z",
"id": 6,
"name": "rspec:other",
2017-03-06 10:56:05 -05:00
"pipeline": {
"id": 6,
"ref": "master",
"sha": "0ff3ae198f8601a285adcf5c0fff204ee6fba5fd",
"status": "pending"
},
"ref": "master",
2018-07-18 17:46:56 -04:00
"artifacts": [],
2017-03-06 10:56:05 -05:00
"runner": null,
"stage": "test",
"status": "failed",
"tag": false,
2019-12-11 07:08:10 -05:00
"web_url": "https://example.com/foo/bar/-/jobs/6",
2017-03-06 10:56:05 -05:00
"user": {
"id": 1,
"name": "Administrator",
"username": "root",
2018-09-25 10:28:57 -04:00
"state": "active",
"avatar_url": "http://www.gravatar.com/avatar/e64c7d89f26bd1972efa854d13d7dd61?s=80& d=identicon",
2017-03-06 10:56:05 -05:00
"web_url": "http://gitlab.dev/root",
2018-09-25 10:28:57 -04:00
"created_at": "2015-12-21T13:14:24.077Z",
"bio": null,
"location": null,
2018-09-25 12:40:24 -04:00
"public_email": "",
2018-09-25 10:28:57 -04:00
"skype": "",
"linkedin": "",
"twitter": "",
"website_url": "",
"organization": ""
2017-03-06 10:56:05 -05:00
}
}
]
```
## List pipeline jobs
Get a list of jobs for a pipeline.
2020-02-27 04:09:01 -05:00
```plaintext
2017-04-21 15:43:55 -04:00
GET /projects/:id/pipelines/:pipeline_id/jobs
2017-03-06 10:56:05 -05:00
```
2018-12-05 05:08:39 -05:00
| Attribute | Type | Required | Description |
|---------------|--------------------------------|----------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
2019-03-06 06:06:21 -05:00
| `id` | integer/string | yes | ID or [URL-encoded path of the project ](README.md#namespaced-path-encoding ) owned by the authenticated user. |
| `pipeline_id` | integer | yes | ID of a pipeline. |
2018-12-05 05:08:39 -05:00
| `scope` | string **or** array of strings | no | Scope of jobs to show. Either one of or an array of the following: `created` , `pending` , `running` , `failed` , `success` , `canceled` , `skipped` , or `manual` . All jobs are returned if `scope` is not provided. |
2017-03-06 10:56:05 -05:00
2020-01-30 10:09:15 -05:00
```shell
2020-05-27 20:08:37 -04:00
curl --header "PRIVATE-TOKEN: < your_access_token > " "https://gitlab.example.com/api/v4/projects/1/pipelines/6/jobs?scope[]=pending& scope[]=running"
2017-03-06 10:56:05 -05:00
```
Example of response
2016-01-05 10:36:14 -05:00
```json
[
2016-06-10 15:45:06 -04:00
{
"commit": {
"author_email": "admin@example.com",
"author_name": "Administrator",
"created_at": "2015-12-24T16:51:14.000+01:00",
"id": "0ff3ae198f8601a285adcf5c0fff204ee6fba5fd",
"message": "Test the CI integration.",
"short_id": "0ff3ae19",
"title": "Test the CI integration."
},
"coverage": null,
2019-05-21 05:21:53 -04:00
"allow_failure": false,
2018-07-03 09:42:40 -04:00
"created_at": "2015-12-24T15:51:21.727Z",
2018-09-09 05:49:44 -04:00
"started_at": "2015-12-24T17:54:24.729Z",
2018-07-03 09:42:40 -04:00
"finished_at": "2015-12-24T17:54:24.921Z",
2018-09-09 05:49:44 -04:00
"duration": 0.192,
2018-07-18 17:57:08 -04:00
"artifacts_expire_at": "2016-01-23T17:54:24.921Z",
2018-07-03 09:42:40 -04:00
"id": 6,
"name": "rspec:other",
2016-09-23 19:43:57 -04:00
"pipeline": {
"id": 6,
"ref": "master",
"sha": "0ff3ae198f8601a285adcf5c0fff204ee6fba5fd",
"status": "pending"
2016-11-15 05:40:36 -05:00
},
2016-06-10 15:45:06 -04:00
"ref": "master",
2018-07-18 17:46:56 -04:00
"artifacts": [],
2016-06-10 15:45:06 -04:00
"runner": null,
"stage": "test",
"status": "failed",
"tag": false,
2018-07-18 17:57:08 -04:00
"web_url": "https://example.com/foo/bar/-/jobs/6",
2016-06-10 15:45:06 -04:00
"user": {
"id": 1,
"name": "Administrator",
"username": "root",
2018-09-25 10:28:57 -04:00
"state": "active",
"avatar_url": "http://www.gravatar.com/avatar/e64c7d89f26bd1972efa854d13d7dd61?s=80& d=identicon",
2016-10-13 07:24:09 -04:00
"web_url": "http://gitlab.dev/root",
2018-09-25 10:28:57 -04:00
"created_at": "2015-12-21T13:14:24.077Z",
"bio": null,
"location": null,
2018-09-25 12:40:24 -04:00
"public_email": "",
2018-09-25 10:28:57 -04:00
"skype": "",
"linkedin": "",
"twitter": "",
"website_url": "",
"organization": ""
2016-06-10 15:45:06 -04:00
}
},
{
"commit": {
"author_email": "admin@example.com",
"author_name": "Administrator",
"created_at": "2015-12-24T16:51:14.000+01:00",
"id": "0ff3ae198f8601a285adcf5c0fff204ee6fba5fd",
"message": "Test the CI integration.",
"short_id": "0ff3ae19",
"title": "Test the CI integration."
2016-01-05 10:36:14 -05:00
},
2016-06-10 15:45:06 -04:00
"coverage": null,
2019-05-21 05:21:53 -04:00
"allow_failure": false,
2018-07-03 09:42:40 -04:00
"created_at": "2015-12-24T15:51:21.802Z",
2018-09-09 05:49:44 -04:00
"started_at": "2015-12-24T17:54:27.722Z",
"finished_at": "2015-12-24T17:54:27.895Z",
"duration": 0.173,
2018-07-03 09:42:40 -04:00
"artifacts_file": {
"filename": "artifacts.zip",
"size": 1000
},
2018-07-18 17:46:56 -04:00
"artifacts": [
{"file_type": "archive", "size": 1000, "filename": "artifacts.zip", "file_format": "zip"},
{"file_type": "metadata", "size": 186, "filename": "metadata.gz", "file_format": "gzip"},
{"file_type": "trace", "size": 1500, "filename": "job.log", "file_format": "raw"},
{"file_type": "junit", "size": 750, "filename": "junit.xml.gz", "file_format": "gzip"}
],
2018-07-18 17:57:08 -04:00
"artifacts_expire_at": "2016-01-23T17:54:27.895Z",
2018-07-03 09:42:40 -04:00
"id": 7,
"name": "teaspoon",
2016-09-23 19:43:57 -04:00
"pipeline": {
"id": 6,
"ref": "master",
"sha": "0ff3ae198f8601a285adcf5c0fff204ee6fba5fd",
"status": "pending"
2016-11-15 05:40:36 -05:00
},
2016-06-10 15:45:06 -04:00
"ref": "master",
2018-07-18 17:46:56 -04:00
"artifacts": [],
2016-06-10 15:45:06 -04:00
"runner": null,
"stage": "test",
"status": "failed",
"tag": false,
2018-07-18 17:57:08 -04:00
"web_url": "https://example.com/foo/bar/-/jobs/7",
2016-06-10 15:45:06 -04:00
"user": {
"id": 1,
"name": "Administrator",
"username": "root",
2018-09-25 10:28:57 -04:00
"state": "active",
"avatar_url": "http://www.gravatar.com/avatar/e64c7d89f26bd1972efa854d13d7dd61?s=80& d=identicon",
2016-10-13 07:24:09 -04:00
"web_url": "http://gitlab.dev/root",
2018-09-25 10:28:57 -04:00
"created_at": "2015-12-21T13:14:24.077Z",
"bio": null,
"location": null,
2018-09-25 12:40:24 -04:00
"public_email": "",
2018-09-25 10:28:57 -04:00
"skype": "",
"linkedin": "",
"twitter": "",
"website_url": "",
"organization": ""
2016-01-05 10:36:14 -05:00
}
2016-06-10 15:45:06 -04:00
}
2016-01-05 10:36:14 -05:00
]
2016-01-12 05:50:14 -05:00
```
2017-03-06 04:24:03 -05:00
## Get a single job
2016-01-05 10:36:14 -05:00
2017-03-06 04:24:03 -05:00
Get a single job of a project
2016-01-05 10:36:14 -05:00
2020-02-27 04:09:01 -05:00
```plaintext
2017-03-06 04:24:03 -05:00
GET /projects/:id/jobs/:job_id
2016-01-05 10:36:14 -05:00
```
2018-12-05 05:08:39 -05:00
| Attribute | Type | Required | Description |
|-----------|----------------|----------|------------------------------------------------------------------------------------------------------------------|
2019-03-06 06:06:21 -05:00
| `id` | integer/string | yes | ID or [URL-encoded path of the project ](README.md#namespaced-path-encoding ) owned by the authenticated user. |
| `job_id` | integer | yes | ID of a job. |
2016-01-13 15:19:18 -05:00
2020-01-30 10:09:15 -05:00
```shell
2018-12-27 04:03:08 -05:00
curl --header "PRIVATE-TOKEN: < your_access_token > " "https://gitlab.example.com/api/v4/projects/1/jobs/8"
2016-01-13 15:19:18 -05:00
```
2016-02-10 08:31:30 -05:00
Example of response
2016-01-05 10:36:14 -05:00
```json
{
2016-06-10 15:45:06 -04:00
"commit": {
"author_email": "admin@example.com",
"author_name": "Administrator",
"created_at": "2015-12-24T16:51:14.000+01:00",
"id": "0ff3ae198f8601a285adcf5c0fff204ee6fba5fd",
"message": "Test the CI integration.",
"short_id": "0ff3ae19",
"title": "Test the CI integration."
},
"coverage": null,
2019-05-21 05:21:53 -04:00
"allow_failure": false,
2016-06-10 15:45:06 -04:00
"created_at": "2015-12-24T15:51:21.880Z",
2018-09-09 05:49:44 -04:00
"started_at": "2015-12-24T17:54:30.733Z",
2016-06-10 15:45:06 -04:00
"finished_at": "2015-12-24T17:54:31.198Z",
2018-09-09 05:49:44 -04:00
"duration": 0.465,
2018-05-10 03:58:19 -04:00
"artifacts_expire_at": "2016-01-23T17:54:31.198Z",
2016-06-10 15:45:06 -04:00
"id": 8,
"name": "rubocop",
2016-09-23 19:43:57 -04:00
"pipeline": {
"id": 6,
"ref": "master",
"sha": "0ff3ae198f8601a285adcf5c0fff204ee6fba5fd",
"status": "pending"
2016-11-15 05:40:36 -05:00
},
2016-06-10 15:45:06 -04:00
"ref": "master",
2018-07-18 17:46:56 -04:00
"artifacts": [],
2016-06-10 15:45:06 -04:00
"runner": null,
"stage": "test",
"status": "failed",
"tag": false,
2018-07-18 17:57:08 -04:00
"web_url": "https://example.com/foo/bar/-/jobs/8",
2016-06-10 15:45:06 -04:00
"user": {
"id": 1,
"name": "Administrator",
"username": "root",
2018-09-25 10:28:57 -04:00
"state": "active",
"avatar_url": "http://www.gravatar.com/avatar/e64c7d89f26bd1972efa854d13d7dd61?s=80& d=identicon",
2016-10-13 07:24:09 -04:00
"web_url": "http://gitlab.dev/root",
2018-09-25 10:28:57 -04:00
"created_at": "2015-12-21T13:14:24.077Z",
"bio": null,
"location": null,
2018-09-25 12:40:24 -04:00
"public_email": "",
2018-09-25 10:28:57 -04:00
"skype": "",
"linkedin": "",
"twitter": "",
"website_url": "",
"organization": ""
2016-06-10 15:45:06 -04:00
}
2016-01-05 10:36:14 -05:00
}
```
2017-03-06 04:24:03 -05:00
## Get job artifacts
2016-02-08 16:32:36 -05:00
2018-03-30 08:46:25 -04:00
> **Notes**:
2018-09-09 05:49:44 -04:00
>
2020-04-21 11:21:10 -04:00
> - [Introduced](https://gitlab.com/gitlab-org/gitlab-foss/-/merge_requests/2893) in GitLab 8.5.
2020-03-30 23:07:51 -04:00
> - The use of `CI_JOB_TOKEN` in the artifacts download API was [introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/2346)
> in [GitLab Premium](https://about.gitlab.com/pricing/) 9.5.
2016-02-22 07:30:22 -05:00
2019-06-06 03:57:39 -04:00
Get the job's artifacts zipped archive of a project.
2016-02-08 16:32:36 -05:00
2020-02-27 04:09:01 -05:00
```plaintext
2017-03-06 04:24:03 -05:00
GET /projects/:id/jobs/:job_id/artifacts
2016-02-08 16:32:36 -05:00
```
2019-06-06 03:57:39 -04:00
| Attribute | Type | Required | Description |
|-------------|----------------|----------|-------------------------------------------------------------------------------------------------------------------------------------------------|
| `id` | integer/string | yes | ID or [URL-encoded path of the project ](README.md#namespaced-path-encoding ) owned by the authenticated user. |
| `job_id` | integer | yes | ID of a job. |
2020-03-30 23:07:51 -04:00
| `job_token` ** (PREMIUM)** | string | no | To be used with [triggers ](../ci/triggers/README.md#when-a-pipeline-depends-on-the-artifacts-of-another-pipeline-premium ) for multi-project pipelines. It should be invoked only inside `.gitlab-ci.yml` . Its value is always `$CI_JOB_TOKEN` . |
2016-02-08 16:32:36 -05:00
2019-06-06 03:57:39 -04:00
Example request using the `PRIVATE-TOKEN` header:
2018-03-30 08:46:25 -04:00
2020-01-30 10:09:15 -05:00
```shell
2019-06-06 03:57:39 -04:00
curl --output artifacts.zip --header "PRIVATE-TOKEN: < your_access_token > " "https://gitlab.example.com/api/v4/projects/1/jobs/42/artifacts"
2016-02-08 16:32:36 -05:00
```
2019-06-06 03:57:39 -04:00
To use this in a [`script` definition ](../ci/yaml/README.md#script ) inside
2019-07-08 04:50:38 -04:00
`.gitlab-ci.yml` ** (PREMIUM)**, you can use either:
2019-06-06 03:57:39 -04:00
- The `JOB-TOKEN` header with the GitLab-provided `CI_JOB_TOKEN` variable.
For example, the following job will download the artifacts of the job with ID
`42` . Note that the command is wrapped into single quotes since it contains a
colon (`:`):
```yaml
artifact_download:
stage: test
script:
- 'curl --location --output artifacts.zip --header "JOB-TOKEN: $CI_JOB_TOKEN" "https://gitlab.example.com/api/v4/projects/1/jobs/42/artifacts"'
```
- Or the `job_token` attribute with the GitLab-provided `CI_JOB_TOKEN` variable.
For example, the following job will download the artifacts of the job with ID `42` :
```yaml
artifact_download:
stage: test
script:
- 'curl --location --output artifacts.zip "https://gitlab.example.com/api/v4/projects/1/jobs/42/artifacts?job_token=$CI_JOB_TOKEN"'
```
2018-12-05 05:08:39 -05:00
Possible response status codes:
2016-02-08 16:32:36 -05:00
| Status | Description |
|-----------|---------------------------------|
2019-06-06 03:57:39 -04:00
| 200 | Serves the artifacts file. |
| 404 | Build not found or no artifacts.|
2016-02-08 16:32:36 -05:00
2017-09-06 05:40:20 -04:00
## Download the artifacts archive
2016-07-21 05:34:36 -04:00
2018-03-30 08:46:25 -04:00
> **Notes**:
2018-09-09 05:49:44 -04:00
>
2020-04-21 11:21:10 -04:00
> - [Introduced](https://gitlab.com/gitlab-org/gitlab-foss/-/merge_requests/5347) in GitLab 8.10.
2020-03-30 23:07:51 -04:00
> - The use of `CI_JOB_TOKEN` in the artifacts download API was [introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/2346)
> in [GitLab Premium](https://about.gitlab.com/pricing/) 9.5.
2016-07-21 05:34:36 -04:00
2019-07-14 09:08:46 -04:00
Download the artifacts zipped archive from the latest successful pipeline for
the given reference name and job, provided the job finished successfully. This
is the same as [getting the job's artifacts ](#get-job-artifacts ), but by
defining the job's name instead of its ID.
2016-07-21 05:34:36 -04:00
2020-02-27 04:09:01 -05:00
```plaintext
2017-03-06 04:24:03 -05:00
GET /projects/:id/jobs/artifacts/:ref_name/download?job=name
2016-07-21 05:34:36 -04:00
```
Parameters
2019-06-06 03:57:39 -04:00
| Attribute | Type | Required | Description |
|-------------|----------------|----------|-------------------------------------------------------------------------------------------------------------------------------------------------|
| `id` | integer/string | yes | ID or [URL-encoded path of the project ](README.md#namespaced-path-encoding ) owned by the authenticated user. |
| `ref_name` | string | yes | Branch or tag name in repository. HEAD or SHA references are not supported. |
| `job` | string | yes | The name of the job. |
2020-03-30 23:07:51 -04:00
| `job_token` ** (PREMIUM)** | string | no | To be used with [triggers ](../ci/triggers/README.md#when-a-pipeline-depends-on-the-artifacts-of-another-pipeline-premium ) for multi-project pipelines. It should be invoked only inside `.gitlab-ci.yml` . Its value is always `$CI_JOB_TOKEN` . |
2016-07-21 05:34:36 -04:00
2019-06-06 03:57:39 -04:00
Example request using the `PRIVATE-TOKEN` header:
2016-07-21 05:34:36 -04:00
2020-01-30 10:09:15 -05:00
```shell
2018-12-27 04:03:08 -05:00
curl --header "PRIVATE-TOKEN: < your_access_token > " "https://gitlab.example.com/api/v4/projects/1/jobs/artifacts/master/download?job=test"
2016-07-21 05:34:36 -04:00
```
2019-06-06 03:57:39 -04:00
To use this in a [`script` definition ](../ci/yaml/README.md#script ) inside
2019-07-08 04:50:38 -04:00
`.gitlab-ci.yml` ** (PREMIUM)**, you can use either:
2019-06-06 03:57:39 -04:00
- The `JOB-TOKEN` header with the GitLab-provided `CI_JOB_TOKEN` variable.
For example, the following job will download the artifacts of the `test` job
of the `master` branch. Note that the command is wrapped into single quotes
since it contains a colon (`:`):
```yaml
artifact_download:
stage: test
script:
- 'curl --location --output artifacts.zip --header "JOB-TOKEN: $CI_JOB_TOKEN" "https://gitlab.example.com/api/v4/projects/$CI_PROJECT_ID/jobs/artifacts/master/download?job=test"'
```
- Or the `job_token` attribute with the GitLab-provided `CI_JOB_TOKEN` variable.
For example, the following job will download the artifacts of the `test` job
of the `master` branch:
```yaml
artifact_download:
stage: test
script:
- 'curl --location --output artifacts.zip "https://gitlab.example.com/api/v4/projects/$CI_PROJECT_ID/jobs/artifacts/master/download?job=test& job_token=$CI_JOB_TOKEN"'
```
2018-12-05 05:08:39 -05:00
Possible response status codes:
2016-07-21 05:34:36 -04:00
| Status | Description |
|-----------|---------------------------------|
2019-06-06 03:57:39 -04:00
| 200 | Serves the artifacts file. |
| 404 | Build not found or no artifacts.|
2016-07-21 05:34:36 -04:00
2018-12-04 05:50:01 -05:00
## Download a single artifact file by job ID
2017-09-06 05:40:20 -04:00
> Introduced in GitLab 10.0
2018-12-05 05:08:39 -05:00
Download a single artifact file from a job with a specified ID from within
2019-06-06 03:57:39 -04:00
the job's artifacts zipped archive. The file is extracted from the archive and
2018-12-05 05:08:39 -05:00
streamed to the client.
2017-09-06 05:40:20 -04:00
2020-02-27 04:09:01 -05:00
```plaintext
2017-09-06 05:40:20 -04:00
GET /projects/:id/jobs/:job_id/artifacts/*artifact_path
```
Parameters
2018-12-05 05:08:39 -05:00
| Attribute | Type | Required | Description |
|-----------------|----------------|----------|------------------------------------------------------------------------------------------------------------------|
2019-03-06 06:06:21 -05:00
| `id` | integer/string | yes | ID or [URL-encoded path of the project ](README.md#namespaced-path-encoding ) owned by the authenticated user. |
2019-07-08 23:28:41 -04:00
| `job_id` | integer | yes | The unique job identifier. |
2018-12-05 05:08:39 -05:00
| `artifact_path` | string | yes | Path to a file inside the artifacts archive. |
2017-09-06 05:40:20 -04:00
Example request:
2020-01-30 10:09:15 -05:00
```shell
2019-07-29 12:19:54 -04:00
curl --location --header "PRIVATE-TOKEN: < your_access_token > " "https://gitlab.example.com/api/v4/projects/1/jobs/5/artifacts/some/release/file.pdf"
2017-09-06 05:40:20 -04:00
```
2018-12-05 05:08:39 -05:00
Possible response status codes:
2017-09-06 05:40:20 -04:00
| Status | Description |
|-----------|--------------------------------------|
| 200 | Sends a single artifact file |
| 400 | Invalid path provided |
| 404 | Build not found or no file/artifacts |
2018-12-04 05:50:01 -05:00
## Download a single artifact file from specific tag or branch
2020-02-06 10:09:11 -05:00
> [Introduced](https://gitlab.com/gitlab-org/gitlab-foss/-/merge_requests/23538) in GitLab 11.5.
2018-12-04 05:50:01 -05:00
2019-07-14 09:08:46 -04:00
Download a single artifact file for a specific job of the latest successful
pipeline for the given reference name from within the job's artifacts archive.
The file is extracted from the archive and streamed to the client.
2018-12-04 05:50:01 -05:00
2020-02-27 04:09:01 -05:00
```plaintext
2018-12-04 05:50:01 -05:00
GET /projects/:id/jobs/artifacts/:ref_name/raw/*artifact_path?job=name
```
Parameters:
| Attribute | Type | Required | Description |
|-----------------|----------------|----------|------------------------------------------------------------------------------------------------------------------|
2019-03-06 06:06:21 -05:00
| `id` | integer/string | yes | ID or [URL-encoded path of the project ](README.md#namespaced-path-encoding ) owned by the authenticated user. |
2018-12-04 05:50:01 -05:00
| `ref_name` | string | yes | Branch or tag name in repository. HEAD or SHA references are not supported. |
| `artifact_path` | string | yes | Path to a file inside the artifacts archive. |
| `job` | string | yes | The name of the job. |
Example request:
2020-01-30 10:09:15 -05:00
```shell
2019-07-29 12:19:54 -04:00
curl --location --header "PRIVATE-TOKEN: < your_access_token > " "https://gitlab.example.com/api/v4/projects/1/jobs/artifacts/master/raw/some/release/file.pdf?job=pdf"
2018-12-04 05:50:01 -05:00
```
Possible response status codes:
| Status | Description |
|-----------|--------------------------------------|
| 200 | Sends a single artifact file |
| 400 | Invalid path provided |
| 404 | Build not found or no file/artifacts |
2019-10-17 20:07:45 -04:00
## Get a log file
2016-06-03 13:56:26 -04:00
2019-10-17 20:07:45 -04:00
Get a log (trace) of a specific job of a project:
2016-06-03 13:56:26 -04:00
2020-02-27 04:09:01 -05:00
```plaintext
2017-03-06 04:24:03 -05:00
GET /projects/:id/jobs/:job_id/trace
2016-06-03 13:56:26 -04:00
```
2018-12-05 05:08:39 -05:00
| Attribute | Type | Required | Description |
|-----------|----------------|----------|------------------------------------------------------------------------------------------------------------------|
2020-05-07 02:09:38 -04:00
| `id` | integer/string | yes | ID or [URL-encoded path of the project ](README.md#namespaced-path-encoding ) owned by the authenticated user. |
| `job_id` | integer | yes | ID of a job. |
2016-06-03 13:56:26 -04:00
2020-01-30 10:09:15 -05:00
```shell
2019-07-29 12:19:54 -04:00
curl --location --header "PRIVATE-TOKEN: < your_access_token > " "https://gitlab.example.com/api/v4/projects/1/jobs/8/trace"
2016-06-03 13:56:26 -04:00
```
2018-12-05 05:08:39 -05:00
Possible response status codes:
2016-06-03 13:56:26 -04:00
2019-10-17 20:07:45 -04:00
| Status | Description |
|-----------|-------------------------------|
| 200 | Serves the log file |
| 404 | Job not found or no log file |
2016-06-03 13:56:26 -04:00
2017-03-06 04:24:03 -05:00
## Cancel a job
2016-01-05 10:36:14 -05:00
2017-03-06 04:24:03 -05:00
Cancel a single job of a project
2016-01-05 10:36:14 -05:00
2020-02-27 04:09:01 -05:00
```plaintext
2017-03-06 04:24:03 -05:00
POST /projects/:id/jobs/:job_id/cancel
2016-01-05 10:36:14 -05:00
```
2018-12-05 05:08:39 -05:00
| Attribute | Type | Required | Description |
|-----------|----------------|----------|------------------------------------------------------------------------------------------------------------------|
2019-03-06 06:06:21 -05:00
| `id` | integer/string | yes | ID or [URL-encoded path of the project ](README.md#namespaced-path-encoding ) owned by the authenticated user. |
| `job_id` | integer | yes | ID of a job. |
2016-01-13 15:19:18 -05:00
2020-01-30 10:09:15 -05:00
```shell
2018-12-27 04:03:08 -05:00
curl --request POST --header "PRIVATE-TOKEN: < your_access_token > " "https://gitlab.example.com/api/v4/projects/1/jobs/1/cancel"
2016-01-13 15:19:18 -05:00
```
2016-01-05 10:36:14 -05:00
2016-02-10 08:31:30 -05:00
Example of response
2016-01-05 10:36:14 -05:00
```json
{
2016-06-10 15:45:06 -04:00
"commit": {
"author_email": "admin@example.com",
"author_name": "Administrator",
"created_at": "2015-12-24T16:51:14.000+01:00",
"id": "0ff3ae198f8601a285adcf5c0fff204ee6fba5fd",
"message": "Test the CI integration.",
"short_id": "0ff3ae19",
"title": "Test the CI integration."
},
"coverage": null,
2019-05-21 05:21:53 -04:00
"allow_failure": false,
2016-06-10 15:45:06 -04:00
"created_at": "2016-01-11T10:13:33.506Z",
2018-09-09 05:49:44 -04:00
"started_at": "2016-01-11T10:14:09.526Z",
"finished_at": null,
"duration": 8,
2018-07-18 17:57:08 -04:00
"id": 42,
2016-06-10 15:45:06 -04:00
"name": "rubocop",
"ref": "master",
2018-07-18 17:46:56 -04:00
"artifacts": [],
2016-06-10 15:45:06 -04:00
"runner": null,
"stage": "test",
"status": "canceled",
"tag": false,
2018-07-18 17:57:08 -04:00
"web_url": "https://example.com/foo/bar/-/jobs/42",
2016-06-10 15:45:06 -04:00
"user": null
2016-01-05 10:36:14 -05:00
}
```
2017-03-06 04:24:03 -05:00
## Retry a job
2016-01-05 10:36:14 -05:00
2017-03-06 04:24:03 -05:00
Retry a single job of a project
2016-01-05 10:36:14 -05:00
2020-02-27 04:09:01 -05:00
```plaintext
2017-03-06 04:24:03 -05:00
POST /projects/:id/jobs/:job_id/retry
2016-01-05 10:36:14 -05:00
```
2018-12-05 05:08:39 -05:00
| Attribute | Type | Required | Description |
|-----------|----------------|----------|------------------------------------------------------------------------------------------------------------------|
2019-03-06 06:06:21 -05:00
| `id` | integer/string | yes | ID or [URL-encoded path of the project ](README.md#namespaced-path-encoding ) owned by the authenticated user. |
| `job_id` | integer | yes | ID of a job. |
2016-01-13 15:19:18 -05:00
2020-01-30 10:09:15 -05:00
```shell
2018-12-27 04:03:08 -05:00
curl --request POST --header "PRIVATE-TOKEN: < your_access_token > " "https://gitlab.example.com/api/v4/projects/1/jobs/1/retry"
2016-01-13 15:19:18 -05:00
```
2016-01-05 10:36:14 -05:00
2016-02-10 08:31:30 -05:00
Example of response
2016-01-05 10:36:14 -05:00
```json
{
2016-06-10 15:45:06 -04:00
"commit": {
"author_email": "admin@example.com",
"author_name": "Administrator",
"created_at": "2015-12-24T16:51:14.000+01:00",
"id": "0ff3ae198f8601a285adcf5c0fff204ee6fba5fd",
"message": "Test the CI integration.",
"short_id": "0ff3ae19",
"title": "Test the CI integration."
},
"coverage": null,
2019-05-21 05:21:53 -04:00
"allow_failure": false,
2016-06-10 15:45:06 -04:00
"created_at": "2016-01-11T10:13:33.506Z",
2018-09-09 05:49:44 -04:00
"started_at": null,
2016-06-10 15:45:06 -04:00
"finished_at": null,
2018-09-09 05:49:44 -04:00
"duration": null,
2018-07-18 17:57:08 -04:00
"id": 42,
2016-06-10 15:45:06 -04:00
"name": "rubocop",
"ref": "master",
2018-07-18 17:46:56 -04:00
"artifacts": [],
2016-06-10 15:45:06 -04:00
"runner": null,
"stage": "test",
"status": "pending",
"tag": false,
2018-07-18 17:57:08 -04:00
"web_url": "https://example.com/foo/bar/-/jobs/42",
2016-06-10 15:45:06 -04:00
"user": null
2016-01-05 10:36:14 -05:00
}
```
2016-02-04 06:03:47 -05:00
2017-03-06 04:24:03 -05:00
## Erase a job
2016-02-04 06:03:47 -05:00
2019-10-17 20:07:45 -04:00
Erase a single job of a project (remove job artifacts and a job log)
2016-02-04 06:03:47 -05:00
2020-02-27 04:09:01 -05:00
```plaintext
2017-03-06 04:24:03 -05:00
POST /projects/:id/jobs/:job_id/erase
2016-02-04 06:03:47 -05:00
```
Parameters
2018-12-05 05:08:39 -05:00
| Attribute | Type | Required | Description |
|-----------|----------------|----------|------------------------------------------------------------------------------------------------------------------|
2019-03-06 06:06:21 -05:00
| `id` | integer/string | yes | ID or [URL-encoded path of the project ](README.md#namespaced-path-encoding ) owned by the authenticated user. |
| `job_id` | integer | yes | ID of a job. |
2016-02-04 06:03:47 -05:00
Example of request
2020-01-30 10:09:15 -05:00
```shell
2018-12-27 04:03:08 -05:00
curl --request POST --header "PRIVATE-TOKEN: < your_access_token > " "https://gitlab.example.com/api/v4/projects/1/jobs/1/erase"
2016-02-04 06:03:47 -05:00
```
Example of response
```json
{
2016-06-10 15:45:06 -04:00
"commit": {
"author_email": "admin@example.com",
"author_name": "Administrator",
"created_at": "2015-12-24T16:51:14.000+01:00",
"id": "0ff3ae198f8601a285adcf5c0fff204ee6fba5fd",
"message": "Test the CI integration.",
"short_id": "0ff3ae19",
"title": "Test the CI integration."
},
"coverage": null,
2019-05-21 05:21:53 -04:00
"allow_failure": false,
2016-06-10 15:45:06 -04:00
"download_url": null,
2018-07-18 17:57:08 -04:00
"id": 42,
2016-06-10 15:45:06 -04:00
"name": "rubocop",
"ref": "master",
2018-07-18 17:46:56 -04:00
"artifacts": [],
2016-06-10 15:45:06 -04:00
"runner": null,
"stage": "test",
"created_at": "2016-01-11T10:13:33.506Z",
"started_at": "2016-01-11T10:13:33.506Z",
"finished_at": "2016-01-11T10:15:10.506Z",
2018-09-09 05:49:44 -04:00
"duration": 97.0,
2016-06-10 15:45:06 -04:00
"status": "failed",
"tag": false,
2018-07-18 17:57:08 -04:00
"web_url": "https://example.com/foo/bar/-/jobs/42",
2016-06-10 15:45:06 -04:00
"user": null
2016-02-04 06:03:47 -05:00
}
```
2016-06-10 11:11:27 -04:00
## Keep artifacts
2016-06-10 15:45:06 -04:00
Prevents artifacts from being deleted when expiration is set.
2016-06-10 11:11:27 -04:00
2020-02-27 04:09:01 -05:00
```plaintext
2017-03-06 04:24:03 -05:00
POST /projects/:id/jobs/:job_id/artifacts/keep
2016-06-10 11:11:27 -04:00
```
Parameters
2018-12-05 05:08:39 -05:00
| Attribute | Type | Required | Description |
|-----------|----------------|----------|------------------------------------------------------------------------------------------------------------------|
2019-03-06 06:06:21 -05:00
| `id` | integer/string | yes | ID or [URL-encoded path of the project ](README.md#namespaced-path-encoding ) owned by the authenticated user. |
| `job_id` | integer | yes | ID of a job. |
2016-06-10 11:11:27 -04:00
2016-06-10 15:45:06 -04:00
Example request:
2016-06-10 11:11:27 -04:00
2020-01-30 10:09:15 -05:00
```shell
2018-12-27 04:03:08 -05:00
curl --request POST --header "PRIVATE-TOKEN: < your_access_token > " "https://gitlab.example.com/api/v4/projects/1/jobs/1/artifacts/keep"
2016-06-10 11:11:27 -04:00
```
2016-06-10 15:45:06 -04:00
Example response:
2016-06-10 11:11:27 -04:00
```json
{
2016-06-10 15:45:06 -04:00
"commit": {
"author_email": "admin@example.com",
"author_name": "Administrator",
"created_at": "2015-12-24T16:51:14.000+01:00",
"id": "0ff3ae198f8601a285adcf5c0fff204ee6fba5fd",
"message": "Test the CI integration.",
"short_id": "0ff3ae19",
"title": "Test the CI integration."
},
"coverage": null,
2019-05-21 05:21:53 -04:00
"allow_failure": false,
2016-06-10 15:45:06 -04:00
"download_url": null,
2018-07-18 17:57:08 -04:00
"id": 42,
2016-06-10 15:45:06 -04:00
"name": "rubocop",
"ref": "master",
2018-07-18 17:46:56 -04:00
"artifacts": [],
2016-06-10 15:45:06 -04:00
"runner": null,
"stage": "test",
"created_at": "2016-01-11T10:13:33.506Z",
"started_at": "2016-01-11T10:13:33.506Z",
"finished_at": "2016-01-11T10:15:10.506Z",
2018-09-09 05:49:44 -04:00
"duration": 97.0,
2016-06-10 15:45:06 -04:00
"status": "failed",
"tag": false,
2018-07-18 17:57:08 -04:00
"web_url": "https://example.com/foo/bar/-/jobs/42",
2016-06-10 15:45:06 -04:00
"user": null
2016-06-10 11:11:27 -04:00
}
```
2016-08-16 04:11:32 -04:00
2019-03-06 06:06:21 -05:00
## Delete artifacts
2020-02-06 10:09:11 -05:00
> [Introduced](https://gitlab.com/gitlab-org/gitlab-foss/-/merge_requests/25522) in GitLab 11.9.
2019-03-06 06:06:21 -05:00
Delete artifacts of a job.
2020-02-27 04:09:01 -05:00
```plaintext
2019-03-06 06:06:21 -05:00
DELETE /projects/:id/jobs/:job_id/artifacts
```
| Attribute | Type | Required | Description |
|-----------|----------------|----------|------------------------------------------------------------------------------------------------------------------|
| `id` | integer/string | yes | ID or [URL-encoded path of the project ](README.md#namespaced-path-encoding ) |
| `job_id` | integer | yes | ID of a job. |
Example request:
2020-01-30 10:09:15 -05:00
```shell
2019-03-06 06:06:21 -05:00
curl --request DELETE --header "PRIVATE-TOKEN: < your_access_token > " "https://gitlab.example.com/api/v4/projects/1/jobs/1/artifacts"
```
NOTE: **Note:**
At least Maintainer role is required to delete artifacts.
If the artifacts were deleted successfully, a response with status `204 No Content` is returned.
2017-03-06 04:24:03 -05:00
## Play a job
2016-08-16 04:11:32 -04:00
2017-03-06 04:24:03 -05:00
Triggers a manual action to start a job.
2016-08-16 04:11:32 -04:00
2020-02-27 04:09:01 -05:00
```plaintext
2017-03-06 04:24:03 -05:00
POST /projects/:id/jobs/:job_id/play
2016-08-16 04:11:32 -04:00
```
2018-12-05 05:08:39 -05:00
| Attribute | Type | Required | Description |
|-----------|----------------|----------|------------------------------------------------------------------------------------------------------------------|
2019-03-06 06:06:21 -05:00
| `id` | integer/string | yes | ID or [URL-encoded path of the project ](README.md#namespaced-path-encoding ) owned by the authenticated user. |
| `job_id` | integer | yes | ID of a job. |
2016-08-16 04:11:32 -04:00
2020-01-30 10:09:15 -05:00
```shell
2018-12-27 04:03:08 -05:00
curl --request POST --header "PRIVATE-TOKEN: < your_access_token > " "https://gitlab.example.com/api/v4/projects/1/jobs/1/play"
2016-08-16 04:11:32 -04:00
```
Example of response
```json
{
"commit": {
"author_email": "admin@example.com",
"author_name": "Administrator",
"created_at": "2015-12-24T16:51:14.000+01:00",
"id": "0ff3ae198f8601a285adcf5c0fff204ee6fba5fd",
"message": "Test the CI integration.",
"short_id": "0ff3ae19",
"title": "Test the CI integration."
},
"coverage": null,
2019-05-21 05:21:53 -04:00
"allow_failure": false,
2016-08-16 04:11:32 -04:00
"created_at": "2016-01-11T10:13:33.506Z",
2018-09-09 05:49:44 -04:00
"started_at": null,
2016-08-16 04:11:32 -04:00
"finished_at": null,
2018-09-09 05:49:44 -04:00
"duration": null,
2018-07-18 17:57:08 -04:00
"id": 42,
2016-08-16 04:11:32 -04:00
"name": "rubocop",
"ref": "master",
2018-07-18 17:46:56 -04:00
"artifacts": [],
2016-08-16 04:11:32 -04:00
"runner": null,
"stage": "test",
"status": "started",
"tag": false,
2018-07-18 17:57:08 -04:00
"web_url": "https://example.com/foo/bar/-/jobs/42",
2016-08-16 04:11:32 -04:00
"user": null
}
```