- 작업 artifacts 가져오기
- artifacts 아카이브 다운로드
- 작업 ID별 단일 아티팩트 파일 다운로드
- 특정 태그 또는 브랜치에서 단일 아티팩트 파일 다운로드
- 아티팩트 유지
- 작업 아티팩트 삭제
- 프로젝트 아티팩트 삭제
Job Artifacts API
작업 artifacts API를 사용하여 작업 artifacts를 다운로드하거나 삭제합니다.
CI/CD 작업 토큰으로 인증하여 사용할 수 있으며, 이는 Premium 및 Ultimate 티어에서 사용할 수 있습니다.
작업 artifacts 가져오기
- artifacts 다운로드 API에서
CI_JOB_TOKEN
사용은 GitLab Premium 9.5에서 소개되었습니다.
프로젝트의 작업 artifacts를 압축한 아카이브를 가져옵니다.
GitLab.com에서 cURL을 사용하여 artifacts를 다운로드하는 경우, 요청이 CDN을 통해 리디렉션될 수 있으므로 --location
매개변수를 사용하세요.
GET /projects/:id/jobs/:job_id/artifacts
속성 | 유형 | 필수 | 설명 |
---|---|---|---|
id
| 정수/문자열 | 예 | 프로젝트의 ID 또는 URL 인코딩된 경로. |
job_id
| 정수 | 예 | 작업의 ID. |
job_token
| 문자열 | 아니오 |
트리거와 함께 사용하도록 설계되었습니다. 이는 .gitlab-ci.yml 파일에서 정의된 CI/CD 작업에서만 사용해야 합니다. 값은 항상 $CI_JOB_TOKEN 입니다. $CI_JOB_TOKEN 과 관련된 작업은이 토큰을 사용할 때 실행 중이어야 합니다. Premium 및 Ultimate에서만 사용할 수 있습니다.
|
PRIVATE-TOKEN
헤더를 사용한 예시 요청:
curl --location --output artifacts.zip --location --header "PRIVATE-TOKEN: <your_access_token>" "https://gitlab.example.com/api/v4/projects/1/jobs/42/artifacts"
Premium 및 Ultimate 티어에서는 CI/CD 작업 토큰을 사용하여 이 엔드포인트에 대해 CI/CD 작업에서 인증할 수 있습니다.
다음 중 하나를 사용하세요:
-
GitLab에서 제공하는
CI_JOB_TOKEN
미리 정의된 변수를 사용하여job_token
속성을 사용합니다. 예를 들어 다음 작업은 ID가42
인 작업의 artifacts를 다운로드합니다: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"'
-
GitLab에서 제공하는
CI_JOB_TOKEN
미리 정의된 변수와 함께JOB-TOKEN
헤더를 사용합니다. 예를 들어 다음 작업은 ID가42
인 작업의 artifacts를 다운로드합니다. 콜론(:
)을 포함하고 있기 때문에 명령어가 따옴표로 묶여 있습니다: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"'
가능한 응답 상태 코드:
상태 | 설명 |
---|---|
200 | artifacts 파일 제공 |
404 | 빌드를 찾을 수 없거나 artifacts가 없음 |
artifacts 아카이브 다운로드
- artifacts 다운로드 API에서
CI_JOB_TOKEN
사용은 GitLab Premium 9.5에서 소개되었습니다.
주어진 참조 이름 및 작업에서 성공적으로 완료된 최신 파이프라인에서 artifacts 압축 아카이브를 다운로드합니다. 이는 작업 ID 대신 작업 이름을 정의함으로써 작업 artifacts 가져오기와 동일합니다.
GitLab.com에서 cURL을 사용하여 artifacts를 다운로드하는 경우, 요청이 CDN을 통해 리디렉션될 수 있으므로 --location
매개변수를 사용하세요.
GET /projects/:id/jobs/artifacts/:ref_name/download?job=name
매개변수
속성 | 유형 | 필수 | 설명 |
---|---|---|---|
id
| 정수/문자열 | 예 | 프로젝트의 ID 또는 URL 인코딩된 경로. |
job
| 문자열 | 예 | 작업의 이름. |
ref_name
| 문자열 | 예 | 리포지터리의 브랜치 또는 태그 이름. HEAD 또는 SHA 참조는 지원되지 않습니다. |
job_token
| 문자열 | 아니오 |
트리거와 함께 사용하도록 설계되었습니다. 이는 .gitlab-ci.yml 파일에서 정의된 CI/CD 작업에서만 사용해야 합니다. 값은 항상 $CI_JOB_TOKEN 입니다. $CI_JOB_TOKEN 과 관련된 작업은이 토큰을 사용할 때 실행 중이어야 합니다. Premium 및 Ultimate에서만 사용할 수 있습니다.
|
PRIVATE-TOKEN
헤더를 사용한 예시 요청:
curl --location --header "PRIVATE-TOKEN: <your_access_token>" "https://gitlab.example.com/api/v4/projects/1/jobs/artifacts/main/download?job=test"
Premium 및 Ultimate 티어에서는 CI/CD 작업 토큰을 사용하여 이 엔드포인트에 대해 CI/CD 작업에서 인증할 수 있습니다.
다음 중 하나를 사용하세요:
-
GitLab에서 제공하는
CI_JOB_TOKEN
미리 정의된 변수를 사용하여job_token
속성을 사용합니다. 예를 들어 다음 작업은main
브랜치의test
작업의 artifacts를 다운로드합니다:artifact_download: stage: test script: - 'curl --location --output artifacts.zip "https://gitlab.example.com/api/v4/projects/$CI_PROJECT_ID/jobs/artifacts/main/download?job=test&job_token=$CI_JOB_TOKEN"'
-
GitLab에서 제공하는
CI_JOB_TOKEN
미리 정의된 변수와 함께JOB-TOKEN
헤더를 사용합니다. 예를 들어 다음 작업은main
브랜치의test
작업의 artifacts를 다운로드합니다. 콜론 (:
)을 포함하고 있기 때문에 명령어가 따옴표로 묶여 있습니다: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/main/download?job=test"'
가능한 응답 상태 코드:
상태 | 설명 |
---|---|
200 | artifacts 파일 제공 |
404 | 빌드를 찾을 수 없거나 artifacts가 없음 |
작업 ID별 단일 아티팩트 파일 다운로드
지정된 ID를 가진 작업에서 아티팩트의 압축 파일에서 하나의 아티팩트 파일을 다운로드합니다. 파일은 아카이브에서 추출되어 클라이언트로 스트리밍됩니다.
GitLab.com에서 cURL을 사용하여 아티팩트를 다운로드하는 경우, 요청이 CDN을 통해 리디렉션 될 수 있으므로 --location
매개변수를 사용하십시오.
GET /projects/:id/jobs/:job_id/artifacts/*artifact_path
매개변수
속성 | 유형 | 필수 | 설명 |
---|---|---|---|
artifact_path
| 문자열 | 예 | 아티팩트 아카이브 내부의 파일 경로입니다. |
id
| 정수/문자열 | 예 | 프로젝트의 ID 또는 URL-encoded한 경로입니다. |
job_id
| 정수 | 예 | 고유한 작업 식별자입니다. |
job_token
| 문자열 | 아니요 |
트리거와 함께 사용할 수 있습니다. 다중 프로젝트 파이프라인을 위한 CI/CD 작업에서만 .gitlab-ci.yml 파일에 정의된 CI/CD 작업에서 호출되어야 합니다. 값은 항상 $CI_JOB_TOKEN 입니다. $CI_JOB_TOKEN 과 연관된 작업은 이 토큰을 사용할 때 실행 중이어야 합니다. 오직 Premium 및 Ultimate 버전에서 사용 가능합니다.
|
예시 요청:
curl --location --header "PRIVATE-TOKEN: <your_access_token>" "https://gitlab.example.com/api/v4/projects/1/jobs/5/artifacts/some/release/file.pdf"
Premium 및 Ultimate 티어에서 이 엔드포인트로 CI/CD 작업에서 CI/CD 작업 토큰을 사용하여 인증할 수 있습니다.
가능한 응답 상태 코드:
상태 | 설명 |
---|---|
200 | 단일 아티팩트 파일 전송 |
400 | 제공된 경로가 잘못되었습니다. |
404 | 빌드를 찾을 수 없거나 파일/아티팩트가 없습니다. |
특정 태그 또는 브랜치에서 단일 아티팩트 파일 다운로드
지정한 참조명의 최신 성공한 파이프라인에 대한 특정 작업의 아티팩트 파일을 다운로드합니다. 파일은 아카이브에서 추출되어 클라이언트로 스트리밍되며 plain/text
콘텐츠 유형을 가집니다.
아티팩트 파일은 CSV 내보내기에서 사용 가능한 것보다 더 많은 세부 정보를 제공합니다. 부모 및 자식 파이프라인용 아티팩트는 부모에서 자식 순서로 계층적으로 검색됩니다. 예를 들어 부모와 자식 파이프라인 모두 동일한 이름을 가진 작업이 있는 경우 부모 파이프라인의 아티팩트가 반환됩니다.
GitLab.com에서 cURL을 사용하여 아티팩트를 다운로드하는 경우, 요청이 CDN을 통해 리디렉션 될 수 있으므로 --location
매개변수를 사용하십시오.
GET /projects/:id/jobs/artifacts/:ref_name/raw/*artifact_path?job=name
매개변수:
속성 | 유형 | 필수 | 설명 |
---|---|---|---|
artifact_path
| 문자열 | 예 | 아티팩트 아카이브 내부의 파일 경로입니다. |
id
| 정수/문자열 | 예 | 프로젝트의 ID 또는 URL-encoded한 경로입니다. |
job
| 문자열 | 예 | 작업의 이름입니다. |
ref_name
| 문자열 | 예 | 리포지터리의 브랜치 또는 태그 이름입니다. HEAD 또는 SHA 레퍼런스는 지원되지 않습니다.
|
job_token
| 문자열 | 아니요 |
트리거와 함께 사용할 수 있습니다. 다중 프로젝트 파이프라인을 위한 CI/CD 작업에서만 .gitlab-ci.yml 파일에 정의된 CI/CD 작업에서 호출되어야 합니다. 값은 항상 $CI_JOB_TOKEN 입니다. $CI_JOB_TOKEN 과 연관된 작업은 이 토큰을 사용할 때 실행 중이어야 합니다. 오직 Premium 및 Ultimate 버전에서 사용 가능합니다.
|
예시 요청:
curl --location --header "PRIVATE-TOKEN: <your_access_token>" "https://gitlab.example.com/api/v4/projects/1/jobs/artifacts/main/raw/some/release/file.pdf?job=pdf"
Premium 및 Ultimate 티어에서 이 엔드포인트로 CI/CD 작업에서 CI/CD 작업 토큰을 사용하여 인증할 수 있습니다.
가능한 응답 상태 코드:
상태 | 설명 |
---|---|
200 | 단일 아티팩트 파일 전송 |
400 | 제공된 경로가 잘못되었습니다. |
404 | 빌드를 찾을 수 없거나 파일/아티팩트가 없습니다. |
아티팩트 유지
만료가 설정된 경우 아티팩트가 삭제되는 것을 방지합니다.
POST /projects/:id/jobs/:job_id/artifacts/keep
매개변수
속성 | 유형 | 필수 | 설명 |
---|---|---|---|
id
| 정수/문자열 | 예 | 인증된 사용자가 소유한 프로젝트의 ID 또는 URL-encoded한 경로입니다. |
job_id
| 정수 | 예 | 작업의 ID입니다. |
예시 요청:
curl --request POST --header "PRIVATE-TOKEN: <your_access_token>" "https://gitlab.example.com/api/v4/projects/1/jobs/1/artifacts/keep"
예시 응답:
{
"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,
"allow_failure": false,
"download_url": null,
"id": 42,
"name": "rubocop",
"ref": "main",
"artifacts": [],
"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",
"duration": 97.0,
"status": "failed",
"failure_reason": "script_failure",
"tag": false,
"web_url": "https://example.com/foo/bar/-/jobs/42",
"user": null
}
작업 아티팩트 삭제
작업의 아티팩트를 삭제합니다.
전제조건:
- 프로젝트에서 적어도 유지자 역할을 가져야 합니다.
DELETE /projects/:id/jobs/:job_id/artifacts
속성 | 유형 | 필수 | 설명 |
---|---|---|---|
id
| 정수/문자열 | 예 | 프로젝트의 ID 또는 URL 인코딩된 경로. |
job_id
| 정수 | 예 | 작업의 ID. |
예시 요청:
curl --request DELETE --header "PRIVATE-TOKEN: <your_access_token>" "https://gitlab.example.com/api/v4/projects/1/jobs/1/artifacts"
아티팩트가 성공적으로 삭제되면 상태가 204 No Content
인 응답이 반환됩니다.
프로젝트 아티팩트 삭제
- GitLab 14.7에서 소개,
bulk_expire_project_artifacts
라는 플래그로. 기본적으로 GitLab Self-managed에서 기본으로 사용됩니다. GitLab.com에서 활성화됨.- 피처 플래그가 제거되었습니다. GitLab 14.10에서.
프로젝트에서 삭제할 수 있는 아티팩트를 삭제합니다. 기본적으로 각 참조의 가장 최근에 성공한 파이프라인의 아티팩트는 삭제되지 않습니다.
이 엔드포인트에 대한 요청은 삭제할 수 있는 모든 아티팩트의 만료를 현재 시간으로 설정합니다. 그런 다음 파일은 만료된 작업 아티팩트를 정기적으로 정리하는 일부로 시스템에서 삭제됩니다. 작업 로그는 결코 삭제되지 않습니다.
정기적인 정리는 비동기적으로 일정에 따라 발생하므로 아티팩트가 삭제되기 전에 짧은 지연이 발생할 수 있습니다.
전제조건:
- 프로젝트에서 적어도 유지자 역할을 가져야 합니다.
DELETE /projects/:id/artifacts
속성 | 유형 | 필수 | 설명 |
---|---|---|---|
id
| 정수/문자열 | 예 | 프로젝트의 ID 또는 URL 인코딩된 경로. |
예시 요청:
curl --request DELETE --header "PRIVATE-TOKEN: <your_access_token>" "https://gitlab.example.com/api/v4/projects/1/artifacts"
상태가 202 Accepted
인 응답이 반환됩니다.