InfoGrab Docs

Job Artifacts API

요약

이 API를 사용하여 Job 아티팩트를 다운로드, 유지 및 삭제합니다. Job ID를 사용하여 Job의 아티팩트 아카이브를 다운로드합니다. GitLab.com에서 cURL을 사용하여 아티팩트를 다운로드하는 경우, 요청이 CDN을 통해 리다이렉트될 수 있으므로 --location 파라미터를 사용하세요.

이 API를 사용하여 Job 아티팩트를 다운로드, 유지 및 삭제합니다.

Job ID로 Job 아티팩트 다운로드#

Job ID를 사용하여 Job의 아티팩트 아카이브를 다운로드합니다.

GitLab.com에서 cURL을 사용하여 아티팩트를 다운로드하는 경우, 요청이 CDN을 통해 리다이렉트될 수 있으므로 --location 파라미터를 사용하세요.

GET /projects/:id/jobs/:job_id/artifacts

지원되는 속성:

속성 유형 필수 여부 설명
id integer or string Yes 프로젝트의 ID 또는 URL 인코딩된 경로.
job_id integer Yes Job의 ID.
job_token string No 멀티 프로젝트 파이프라인을 위한 CI/CD Job 토큰. Premium 및 Ultimate만 해당.

성공 시 200을 반환하고 아티팩트 파일을 제공합니다.

요청 예시:

curl --request GET \
  --location \
  --header "PRIVATE-TOKEN: <your_access_token>" \
  --url "https://gitlab.example.com/api/v4/projects/1/jobs/42/artifacts" \
  --output artifacts.zip

CI/CD Job 토큰을 사용한 요청 예시:

# Uses the job_token parameter
artifact_download:
  stage: test
  script:
    - 'curl --request GET \
         --location \
         --url "https://gitlab.example.com/api/v4/projects/1/jobs/42/artifacts?job_token=$CI_JOB_TOKEN" \
         --output artifacts.zip'

참조 이름으로 Job 아티팩트 다운로드#

히스토리
  • search_recent_successful_pipelines 속성이 ci_search_recent_successful_pipelines라는 플래그와 함께 GitLab 18.7에서 도입되었습니다. 기본적으로 비활성화됩니다.
  • GitLab 18.10에서 기능 플래그 ci_search_recent_successful_pipelines가 제거되었습니다.

참조 이름을 사용하여 최신 성공한 파이프라인에서 Job의 아티팩트 아카이브를 다운로드합니다. search_recent_successful_pipelines=true인 경우, 지정된 참조에 대해 최근 성공한 파이프라인 최대 100개를 검색합니다.

최신 성공한 파이프라인은 생성 시간을 기준으로 결정됩니다. 개별 Job의 시작 또는 종료 시간은 어떤 파이프라인이 최신인지에 영향을 주지 않습니다.

상위 및 하위 파이프라인의 경우, 아티팩트는 상위에서 하위로 계층 순서로 검색됩니다. 상위 파이프라인과 하위 파이프라인 모두 동일한 이름의 Job이 있는 경우 상위 파이프라인의 아티팩트가 반환됩니다.

사전 요구 사항:

  • success 상태의 완료된 파이프라인이 있어야 합니다.
  • 파이프라인에 수동 Job이 포함된 경우 다음 중 하나여야 합니다:
    • 성공적으로 완료됩니다.
    • allow_failure: true가 설정되어 있습니다.

GitLab.com에서 cURL을 사용하여 아티팩트를 다운로드하는 경우, 요청이 CDN을 통해 리다이렉트될 수 있으므로 --location 파라미터를 사용하세요.

GET /projects/:id/jobs/artifacts/:ref_name/download?job=name

지원되는 속성:

속성 유형 필수 여부 설명
id integer or string Yes 프로젝트의 ID 또는 URL 인코딩된 경로.
job string Yes Job의 이름.
ref_name string Yes 리포지터리의 브랜치 또는 태그 이름. HEAD 또는 SHA 참조는 지원되지 않습니다. 머지 리퀘스트 파이프라인의 경우 브랜치 이름 대신 refs/merge-requests/:iid/head를 사용하세요.
job_token string No 멀티 프로젝트 파이프라인을 위한 CI/CD Job 토큰. Premium 및 Ultimate만 해당.
search_recent_successful_pipelines boolean No 최신 파이프라인 대신 최근 성공한 파이프라인에서 검색합니다. 기본값은 false.

성공 시 200을 반환하고 아티팩트 파일을 제공합니다.

Job 또는 아티팩트를 찾을 수 없는 경우 404를 반환합니다.

요청 예시:

curl --request GET \
  --location \
  --header "PRIVATE-TOKEN: <your_access_token>" \
  --url "https://gitlab.example.com/api/v4/projects/1/jobs/artifacts/main/download?job=test"

CI/CD Job 토큰을 사용한 요청 예시:

# Uses the job_token parameter
artifact_download:
  stage: test
  script:
    - 'curl --request GET \
         --location \
         --url "https://gitlab.example.com/api/v4/projects/$CI_PROJECT_ID/jobs/artifacts/main/download?job=test&job_token=$CI_JOB_TOKEN" \
         --output artifacts.zip'

최근 파이프라인 검색을 사용한 요청 예시:

curl --location \
  --header "PRIVATE-TOKEN: " \
  --url "https://gitlab.example.com/api/v4/projects/1/jobs/artifacts/main/download?job=test&search_recent_successful_pipelines=true"

Job ID로 단일 아티팩트 파일 다운로드#

Job ID를 사용하여 Job의 아티팩트에서 단일 파일을 다운로드합니다. 파일은 아카이브에서 추출되어 클라이언트로 스트리밍됩니다.

GitLab.com에서 cURL을 사용하여 아티팩트를 다운로드하는 경우, 요청이 CDN을 통해 리다이렉트될 수 있으므로 --location 파라미터를 사용하세요.

GET /projects/:id/jobs/:job_id/artifacts/*artifact_path

지원되는 속성:

속성 유형 필수 여부 설명
artifact_path string Yes 아티팩트 아카이브 내부의 파일 경로.
id integer or string Yes 프로젝트의 ID 또는 URL 인코딩된 경로.
job_id integer Yes 고유한 Job 식별자.
job_token string No 멀티 프로젝트 파이프라인을 위한 CI/CD Job 토큰. Premium 및 Ultimate만 해당.

성공 시 200을 반환하고 단일 아티팩트 파일을 전송합니다.

요청 예시:

curl --location \
  --header "PRIVATE-TOKEN: <your_access_token>" \
  --url "https://gitlab.example.com/api/v4/projects/1/jobs/5/artifacts/some/release/file.pdf"

아티팩트 아카이브의 모든 파일 나열#

히스토리
  • GitLab 18.8에서 도입되었습니다.

지정된 Job의 아티팩트 아카이브에 있는 모든 파일과 디렉토리를 나열합니다. 이 작업은 전체 아카이브를 추출하지 않고 아티팩트 메타데이터를 읽어 대용량 아카이브 탐색에 효율적입니다.

GET /projects/:id/jobs/:job_id/artifacts/tree

지원되는 속성:

속성 유형 필수 여부 설명
id integer or string Yes 프로젝트의 ID 또는 URL 인코딩된 경로.
job_id integer Yes Job의 ID.
path string No 아티팩트 아카이브에서 탐색할 경로. 기본값은 루트 디렉토리입니다.
recursive boolean No true이면 모든 항목을 재귀적으로 반환합니다. 기본값: false.
job_token string No 멀티 프로젝트 파이프라인 트리거에 사용되는 CI/CD Job 토큰. Premium 및 Ultimate만 해당.

이 엔드포인트는 페이지네이션을 지원합니다.

성공 시 200과 다음 응답 속성을 반환합니다:

속성 유형 설명
name string 파일 또는 디렉토리 이름.
path string 아티팩트 아카이브의 전체 경로. 디렉토리에는 후행 슬래시가 포함됩니다.
type string 항목 유형. 가능한 값: file, directory.
size integer 파일 크기(바이트). 파일에만 표시됩니다.
mode string 8진수 형식의 Unix 파일 모드. 예: 파일의 경우 100644, 디렉토리의 경우 040755.

Job, 아티팩트, 아티팩트 메타데이터 또는 지정된 경로를 찾을 수 없는 경우 404를 반환합니다.

요청 예시:

curl --header "PRIVATE-TOKEN: <your_access_token>" \
  --url "https://gitlab.example.com/api/v4/projects/1/jobs/42/artifacts/tree"

응답 예시:

[
  {
    "name": "ci_build_artifacts.zip",
    "path": "ci_build_artifacts.zip",
    "type": "file",
    "size": 1024,
    "mode": "100644"
  },
  {
    "name": "other_artifacts_0.1.2",
    "path": "other_artifacts_0.1.2/",
    "type": "directory",
    "mode": "040755"
  }
]

하위 디렉토리를 탐색하는 요청 예시:

curl --header "PRIVATE-TOKEN: <your_access_token>" \
  --url "https://gitlab.example.com/api/v4/projects/1/jobs/42/artifacts/tree?path=coverage/reports"

재귀적 목록을 위한 요청 예시:

curl --header "PRIVATE-TOKEN: <your_access_token>" \
  --url "https://gitlab.example.com/api/v4/projects/1/jobs/42/artifacts/tree?recursive=true"

CI/CD Job 토큰을 사용한 요청 예시:

# Uses the job_token parameter
list_artifacts:
  stage: test
  script:
    - 'curl --url "https://gitlab.example.com/api/v4/projects/1/jobs/42/artifacts/tree?job_token=$CI_JOB_TOKEN"'

참조 이름으로 단일 아티팩트 파일 다운로드#

히스토리
  • search_recent_successful_pipelines 속성이 ci_search_recent_successful_pipelines라는 플래그와 함께 GitLab 18.9에서 도입되었습니다. 기본적으로 비활성화됩니다.
  • GitLab 18.10에서 기능 플래그 ci_search_recent_successful_pipelines가 제거되었습니다.

참조 이름을 사용하여 최신 성공한 파이프라인의 Job 아티팩트에서 단일 파일을 다운로드합니다. 파일은 아카이브에서 추출되어 plain/text 콘텐츠 유형으로 클라이언트에게 스트리밍됩니다. search_recent_successful_pipelines=true인 경우, 지정된 참조에 대해 최근 성공한 파이프라인 최대 100개를 검색합니다.

상위 및 하위 파이프라인의 경우, 아티팩트는 상위에서 하위로 계층 순서로 검색됩니다. 상위 파이프라인과 하위 파이프라인 모두 동일한 이름의 Job이 있는 경우 상위 파이프라인의 아티팩트가 반환됩니다.

아티팩트 파일은 CSV 내보내기에서 사용할 수 있는 것보다 더 자세한 세부 정보를 제공합니다.

사전 요구 사항:

  • success 상태의 완료된 파이프라인이 있어야 합니다.
  • 파이프라인에 수동 Job이 포함된 경우 다음 중 하나여야 합니다:
    • 성공적으로 완료됩니다.
    • allow_failure: true가 설정되어 있습니다.
  • 최근 성공한 파이프라인에서 검색하려면 프로젝트에 대해 ci_search_recent_successful_pipelines 기능 플래그가 활성화되어 있어야 합니다.

GitLab.com에서 cURL을 사용하여 아티팩트를 다운로드하는 경우, 요청이 CDN을 통해 리다이렉트될 수 있으므로 --location 파라미터를 사용하세요.

GET /projects/:id/jobs/artifacts/:ref_name/raw/*artifact_path?job=name

지원되는 속성:

속성 유형 필수 여부 설명
artifact_path string Yes 아티팩트 아카이브 내부의 파일 경로.
id integer or string Yes 프로젝트의 ID 또는 URL 인코딩된 경로.
job string Yes Job의 이름.
ref_name string Yes 리포지터리의 브랜치 또는 태그 이름. HEAD 또는 SHA 참조는 지원되지 않습니다. 머지 리퀘스트 파이프라인의 경우 브랜치 이름 대신 refs/merge-requests/:iid/head를 사용하세요.
job_token string No 멀티 프로젝트 파이프라인을 위한 CI/CD Job 토큰. Premium 및 Ultimate만 해당.
search_recent_successful_pipelines boolean No 최신 파이프라인 대신 최근 성공한 파이프라인에서 검색합니다. 기본값은 false.

성공 시 200을 반환하고 단일 아티팩트 파일을 전송합니다.

Job 또는 아티팩트 파일을 찾을 수 없는 경우 404를 반환합니다.

요청 예시:

curl --location \
  --header "PRIVATE-TOKEN: <your_access_token>" \
  --url "https://gitlab.example.com/api/v4/projects/1/jobs/artifacts/main/raw/some/release/file.pdf?job=pdf"

최근 파이프라인 검색을 사용한 요청 예시:

curl --location \
  --header "PRIVATE-TOKEN: <your_access_token>" \
  --url "https://gitlab.example.com/api/v4/projects/1/jobs/artifacts/main/raw/some/release/file.pdf?job=pdf&search_recent_successful_pipelines=true"

Job 아티팩트 유지#

Job 아티팩트가 만료 날짜에 자동으로 삭제되는 것을 방지합니다.

POST /projects/:id/jobs/:job_id/artifacts/keep

지원되는 속성:

속성 유형 필수 여부 설명
id integer or string Yes 프로젝트의 ID 또는 URL 인코딩된 경로.
job_id integer Yes Job의 ID.

성공 시 200과 Job 세부 정보를 반환합니다.

요청 예시:

curl --request POST \
  --header "PRIVATE-TOKEN: <your_access_token>" \
  --url "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
}

Job 아티팩트 삭제#

특정 Job과 관련된 모든 아티팩트를 삭제합니다. 아티팩트는 삭제 후 복구할 수 없습니다.

사전 요구 사항:

  • 프로젝트에 대한 Maintainer 또는 Owner 권한이 있어야 합니다.
DELETE /projects/:id/jobs/:job_id/artifacts

지원되는 속성:

속성 유형 필수 여부 설명
id integer or string Yes 프로젝트의 ID 또는 URL 인코딩된 경로.
job_id integer Yes Job의 ID.

성공 시 204 No Content를 반환합니다.

요청 예시:

curl --request DELETE \
  --header "PRIVATE-TOKEN: <your_access_token>" \
  --url "https://gitlab.example.com/api/v4/projects/1/jobs/1/artifacts"

프로젝트의 모든 Job 아티팩트 삭제#

프로젝트에서 삭제 가능한 모든 Job 아티팩트를 삭제합니다. 아티팩트는 삭제 후 복구할 수 없습니다.

기본적으로 각 참조의 가장 최근 성공한 파이프라인의 아티팩트는 삭제되지 않습니다.

이 엔드포인트에 대한 요청은 삭제 가능한 모든 Job 아티팩트의 만료 시간을 현재 시간으로 설정합니다. 그런 다음 만료된 Job 아티팩트의 정기적인 정리의 일부로 파일이 시스템에서 삭제됩니다. Job 로그는 삭제되지 않습니다.

정기적인 정리는 일정에 따라 비동기적으로 발생하므로 아티팩트가 삭제되기 전에 짧은 지연이 있을 수 있습니다.

사전 요구 사항:

  • 프로젝트에 대한 Maintainer 또는 Owner 권한이 있어야 합니다.
DELETE /projects/:id/artifacts

지원되는 속성:

속성 유형 필수 여부 설명
id integer or string Yes 프로젝트의 ID 또는 URL 인코딩된 경로.

성공 시 202 Accepted를 반환합니다.

요청 예시:

curl --request DELETE \
  --header "PRIVATE-TOKEN: <your_access_token>" \
  --url "https://gitlab.example.com/api/v4/projects/1/artifacts"

문제 해결#

머지 리퀘스트 파이프라인과 함께 브랜치 이름 사용#

브랜치 이름을 ref_name으로 사용하여 Job 아티팩트를 다운로드하려고 할 때 404 Not Found 오류가 발생할 수 있습니다.

이 이슈는 머지 리퀘스트 파이프라인이 브랜치 파이프라인과 다른 참조 형식을 사용하기 때문에 발생합니다. 머지 리퀘스트 파이프라인은 소스 브랜치에 직접 실행되는 것이 아니라 refs/merge-requests/:iid/head에서 실행됩니다.

머지 리퀘스트 파이프라인의 Job 아티팩트를 다운로드하려면 브랜치 이름 대신 refs/merge-requests/:iid/headref_name으로 사용하세요. 여기서 :iid는 머지 리퀘스트 ID입니다. 머지 리퀘스트 파이프라인에서 ID는 $CI_MERGE_REQUEST_IID 변수에서, 전체 ref_name$CI_MERGE_REQUEST_REF_PATH 변수에서 사용할 수 있습니다.

예를 들어, 머지 리퀘스트 !123의 경우:

curl --location \
  --header "PRIVATE-TOKEN: <your_access_token>" \
  --url "https://gitlab.example.com/api/v4/projects/1/jobs/artifacts/refs/merge-requests/123/head/raw/file.txt?job=test"

artifacts:reports 파일 다운로드#

Job 아티팩트 API를 사용하여 보고서를 다운로드하려고 할 때 404 Not Found 오류가 발생할 수 있습니다.

이 이슈는 보고서가 기본적으로 다운로드 가능하지 않기 때문에 발생합니다.

보고서를 다운로드 가능하게 하려면 파일 이름 또는 gl-*-report.jsonartifacts:paths에 추가하세요.

Job Artifacts API

Tier: Free, Premium, Ultimate
Offering: GitLab.com, GitLab Self-Managed, GitLab Dedicated
원문 보기
요약

이 API를 사용하여 Job 아티팩트를 다운로드, 유지 및 삭제합니다. Job ID를 사용하여 Job의 아티팩트 아카이브를 다운로드합니다. GitLab.com에서 cURL을 사용하여 아티팩트를 다운로드하는 경우, 요청이 CDN을 통해 리다이렉트될 수 있으므로 --location 파라미터를 사용하세요.

이 API를 사용하여 Job 아티팩트를 다운로드, 유지 및 삭제합니다.

Job ID로 Job 아티팩트 다운로드#

Job ID를 사용하여 Job의 아티팩트 아카이브를 다운로드합니다.

GitLab.com에서 cURL을 사용하여 아티팩트를 다운로드하는 경우, 요청이 CDN을 통해 리다이렉트될 수 있으므로 --location 파라미터를 사용하세요.

GET /projects/:id/jobs/:job_id/artifacts

지원되는 속성:

속성 유형 필수 여부 설명
id integer or string Yes 프로젝트의 ID 또는 URL 인코딩된 경로.
job_id integer Yes Job의 ID.
job_token string No 멀티 프로젝트 파이프라인을 위한 CI/CD Job 토큰. Premium 및 Ultimate만 해당.

성공 시 200을 반환하고 아티팩트 파일을 제공합니다.

요청 예시:

curl --request GET \
  --location \
  --header "PRIVATE-TOKEN: <your_access_token>" \
  --url "https://gitlab.example.com/api/v4/projects/1/jobs/42/artifacts" \
  --output artifacts.zip

CI/CD Job 토큰을 사용한 요청 예시:

# Uses the job_token parameter
artifact_download:
  stage: test
  script:
    - 'curl --request GET \
         --location \
         --url "https://gitlab.example.com/api/v4/projects/1/jobs/42/artifacts?job_token=$CI_JOB_TOKEN" \
         --output artifacts.zip'

참조 이름으로 Job 아티팩트 다운로드#

히스토리
  • search_recent_successful_pipelines 속성이 ci_search_recent_successful_pipelines라는 플래그와 함께 GitLab 18.7에서 도입되었습니다. 기본적으로 비활성화됩니다.
  • GitLab 18.10에서 기능 플래그 ci_search_recent_successful_pipelines가 제거되었습니다.

참조 이름을 사용하여 최신 성공한 파이프라인에서 Job의 아티팩트 아카이브를 다운로드합니다. search_recent_successful_pipelines=true인 경우, 지정된 참조에 대해 최근 성공한 파이프라인 최대 100개를 검색합니다.

최신 성공한 파이프라인은 생성 시간을 기준으로 결정됩니다. 개별 Job의 시작 또는 종료 시간은 어떤 파이프라인이 최신인지에 영향을 주지 않습니다.

상위 및 하위 파이프라인의 경우, 아티팩트는 상위에서 하위로 계층 순서로 검색됩니다. 상위 파이프라인과 하위 파이프라인 모두 동일한 이름의 Job이 있는 경우 상위 파이프라인의 아티팩트가 반환됩니다.

사전 요구 사항:

  • success 상태의 완료된 파이프라인이 있어야 합니다.
  • 파이프라인에 수동 Job이 포함된 경우 다음 중 하나여야 합니다:
    • 성공적으로 완료됩니다.
    • allow_failure: true가 설정되어 있습니다.

GitLab.com에서 cURL을 사용하여 아티팩트를 다운로드하는 경우, 요청이 CDN을 통해 리다이렉트될 수 있으므로 --location 파라미터를 사용하세요.

GET /projects/:id/jobs/artifacts/:ref_name/download?job=name

지원되는 속성:

속성 유형 필수 여부 설명
id integer or string Yes 프로젝트의 ID 또는 URL 인코딩된 경로.
job string Yes Job의 이름.
ref_name string Yes 리포지터리의 브랜치 또는 태그 이름. HEAD 또는 SHA 참조는 지원되지 않습니다. 머지 리퀘스트 파이프라인의 경우 브랜치 이름 대신 refs/merge-requests/:iid/head를 사용하세요.
job_token string No 멀티 프로젝트 파이프라인을 위한 CI/CD Job 토큰. Premium 및 Ultimate만 해당.
search_recent_successful_pipelines boolean No 최신 파이프라인 대신 최근 성공한 파이프라인에서 검색합니다. 기본값은 false.

성공 시 200을 반환하고 아티팩트 파일을 제공합니다.

Job 또는 아티팩트를 찾을 수 없는 경우 404를 반환합니다.

요청 예시:

curl --request GET \
  --location \
  --header "PRIVATE-TOKEN: <your_access_token>" \
  --url "https://gitlab.example.com/api/v4/projects/1/jobs/artifacts/main/download?job=test"

CI/CD Job 토큰을 사용한 요청 예시:

# Uses the job_token parameter
artifact_download:
  stage: test
  script:
    - 'curl --request GET \
         --location \
         --url "https://gitlab.example.com/api/v4/projects/$CI_PROJECT_ID/jobs/artifacts/main/download?job=test&job_token=$CI_JOB_TOKEN" \
         --output artifacts.zip'

최근 파이프라인 검색을 사용한 요청 예시:

curl --location \
  --header "PRIVATE-TOKEN: " \
  --url "https://gitlab.example.com/api/v4/projects/1/jobs/artifacts/main/download?job=test&search_recent_successful_pipelines=true"

Job ID로 단일 아티팩트 파일 다운로드#

Job ID를 사용하여 Job의 아티팩트에서 단일 파일을 다운로드합니다. 파일은 아카이브에서 추출되어 클라이언트로 스트리밍됩니다.

GitLab.com에서 cURL을 사용하여 아티팩트를 다운로드하는 경우, 요청이 CDN을 통해 리다이렉트될 수 있으므로 --location 파라미터를 사용하세요.

GET /projects/:id/jobs/:job_id/artifacts/*artifact_path

지원되는 속성:

속성 유형 필수 여부 설명
artifact_path string Yes 아티팩트 아카이브 내부의 파일 경로.
id integer or string Yes 프로젝트의 ID 또는 URL 인코딩된 경로.
job_id integer Yes 고유한 Job 식별자.
job_token string No 멀티 프로젝트 파이프라인을 위한 CI/CD Job 토큰. Premium 및 Ultimate만 해당.

성공 시 200을 반환하고 단일 아티팩트 파일을 전송합니다.

요청 예시:

curl --location \
  --header "PRIVATE-TOKEN: <your_access_token>" \
  --url "https://gitlab.example.com/api/v4/projects/1/jobs/5/artifacts/some/release/file.pdf"

아티팩트 아카이브의 모든 파일 나열#

히스토리
  • GitLab 18.8에서 도입되었습니다.

지정된 Job의 아티팩트 아카이브에 있는 모든 파일과 디렉토리를 나열합니다. 이 작업은 전체 아카이브를 추출하지 않고 아티팩트 메타데이터를 읽어 대용량 아카이브 탐색에 효율적입니다.

GET /projects/:id/jobs/:job_id/artifacts/tree

지원되는 속성:

속성 유형 필수 여부 설명
id integer or string Yes 프로젝트의 ID 또는 URL 인코딩된 경로.
job_id integer Yes Job의 ID.
path string No 아티팩트 아카이브에서 탐색할 경로. 기본값은 루트 디렉토리입니다.
recursive boolean No true이면 모든 항목을 재귀적으로 반환합니다. 기본값: false.
job_token string No 멀티 프로젝트 파이프라인 트리거에 사용되는 CI/CD Job 토큰. Premium 및 Ultimate만 해당.

이 엔드포인트는 페이지네이션을 지원합니다.

성공 시 200과 다음 응답 속성을 반환합니다:

속성 유형 설명
name string 파일 또는 디렉토리 이름.
path string 아티팩트 아카이브의 전체 경로. 디렉토리에는 후행 슬래시가 포함됩니다.
type string 항목 유형. 가능한 값: file, directory.
size integer 파일 크기(바이트). 파일에만 표시됩니다.
mode string 8진수 형식의 Unix 파일 모드. 예: 파일의 경우 100644, 디렉토리의 경우 040755.

Job, 아티팩트, 아티팩트 메타데이터 또는 지정된 경로를 찾을 수 없는 경우 404를 반환합니다.

요청 예시:

curl --header "PRIVATE-TOKEN: <your_access_token>" \
  --url "https://gitlab.example.com/api/v4/projects/1/jobs/42/artifacts/tree"

응답 예시:

[
  {
    "name": "ci_build_artifacts.zip",
    "path": "ci_build_artifacts.zip",
    "type": "file",
    "size": 1024,
    "mode": "100644"
  },
  {
    "name": "other_artifacts_0.1.2",
    "path": "other_artifacts_0.1.2/",
    "type": "directory",
    "mode": "040755"
  }
]

하위 디렉토리를 탐색하는 요청 예시:

curl --header "PRIVATE-TOKEN: <your_access_token>" \
  --url "https://gitlab.example.com/api/v4/projects/1/jobs/42/artifacts/tree?path=coverage/reports"

재귀적 목록을 위한 요청 예시:

curl --header "PRIVATE-TOKEN: <your_access_token>" \
  --url "https://gitlab.example.com/api/v4/projects/1/jobs/42/artifacts/tree?recursive=true"

CI/CD Job 토큰을 사용한 요청 예시:

# Uses the job_token parameter
list_artifacts:
  stage: test
  script:
    - 'curl --url "https://gitlab.example.com/api/v4/projects/1/jobs/42/artifacts/tree?job_token=$CI_JOB_TOKEN"'

참조 이름으로 단일 아티팩트 파일 다운로드#

히스토리
  • search_recent_successful_pipelines 속성이 ci_search_recent_successful_pipelines라는 플래그와 함께 GitLab 18.9에서 도입되었습니다. 기본적으로 비활성화됩니다.
  • GitLab 18.10에서 기능 플래그 ci_search_recent_successful_pipelines가 제거되었습니다.

참조 이름을 사용하여 최신 성공한 파이프라인의 Job 아티팩트에서 단일 파일을 다운로드합니다. 파일은 아카이브에서 추출되어 plain/text 콘텐츠 유형으로 클라이언트에게 스트리밍됩니다. search_recent_successful_pipelines=true인 경우, 지정된 참조에 대해 최근 성공한 파이프라인 최대 100개를 검색합니다.

상위 및 하위 파이프라인의 경우, 아티팩트는 상위에서 하위로 계층 순서로 검색됩니다. 상위 파이프라인과 하위 파이프라인 모두 동일한 이름의 Job이 있는 경우 상위 파이프라인의 아티팩트가 반환됩니다.

아티팩트 파일은 CSV 내보내기에서 사용할 수 있는 것보다 더 자세한 세부 정보를 제공합니다.

사전 요구 사항:

  • success 상태의 완료된 파이프라인이 있어야 합니다.
  • 파이프라인에 수동 Job이 포함된 경우 다음 중 하나여야 합니다:
    • 성공적으로 완료됩니다.
    • allow_failure: true가 설정되어 있습니다.
  • 최근 성공한 파이프라인에서 검색하려면 프로젝트에 대해 ci_search_recent_successful_pipelines 기능 플래그가 활성화되어 있어야 합니다.

GitLab.com에서 cURL을 사용하여 아티팩트를 다운로드하는 경우, 요청이 CDN을 통해 리다이렉트될 수 있으므로 --location 파라미터를 사용하세요.

GET /projects/:id/jobs/artifacts/:ref_name/raw/*artifact_path?job=name

지원되는 속성:

속성 유형 필수 여부 설명
artifact_path string Yes 아티팩트 아카이브 내부의 파일 경로.
id integer or string Yes 프로젝트의 ID 또는 URL 인코딩된 경로.
job string Yes Job의 이름.
ref_name string Yes 리포지터리의 브랜치 또는 태그 이름. HEAD 또는 SHA 참조는 지원되지 않습니다. 머지 리퀘스트 파이프라인의 경우 브랜치 이름 대신 refs/merge-requests/:iid/head를 사용하세요.
job_token string No 멀티 프로젝트 파이프라인을 위한 CI/CD Job 토큰. Premium 및 Ultimate만 해당.
search_recent_successful_pipelines boolean No 최신 파이프라인 대신 최근 성공한 파이프라인에서 검색합니다. 기본값은 false.

성공 시 200을 반환하고 단일 아티팩트 파일을 전송합니다.

Job 또는 아티팩트 파일을 찾을 수 없는 경우 404를 반환합니다.

요청 예시:

curl --location \
  --header "PRIVATE-TOKEN: <your_access_token>" \
  --url "https://gitlab.example.com/api/v4/projects/1/jobs/artifacts/main/raw/some/release/file.pdf?job=pdf"

최근 파이프라인 검색을 사용한 요청 예시:

curl --location \
  --header "PRIVATE-TOKEN: <your_access_token>" \
  --url "https://gitlab.example.com/api/v4/projects/1/jobs/artifacts/main/raw/some/release/file.pdf?job=pdf&search_recent_successful_pipelines=true"

Job 아티팩트 유지#

Job 아티팩트가 만료 날짜에 자동으로 삭제되는 것을 방지합니다.

POST /projects/:id/jobs/:job_id/artifacts/keep

지원되는 속성:

속성 유형 필수 여부 설명
id integer or string Yes 프로젝트의 ID 또는 URL 인코딩된 경로.
job_id integer Yes Job의 ID.

성공 시 200과 Job 세부 정보를 반환합니다.

요청 예시:

curl --request POST \
  --header "PRIVATE-TOKEN: <your_access_token>" \
  --url "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
}

Job 아티팩트 삭제#

특정 Job과 관련된 모든 아티팩트를 삭제합니다. 아티팩트는 삭제 후 복구할 수 없습니다.

사전 요구 사항:

  • 프로젝트에 대한 Maintainer 또는 Owner 권한이 있어야 합니다.
DELETE /projects/:id/jobs/:job_id/artifacts

지원되는 속성:

속성 유형 필수 여부 설명
id integer or string Yes 프로젝트의 ID 또는 URL 인코딩된 경로.
job_id integer Yes Job의 ID.

성공 시 204 No Content를 반환합니다.

요청 예시:

curl --request DELETE \
  --header "PRIVATE-TOKEN: <your_access_token>" \
  --url "https://gitlab.example.com/api/v4/projects/1/jobs/1/artifacts"

프로젝트의 모든 Job 아티팩트 삭제#

프로젝트에서 삭제 가능한 모든 Job 아티팩트를 삭제합니다. 아티팩트는 삭제 후 복구할 수 없습니다.

기본적으로 각 참조의 가장 최근 성공한 파이프라인의 아티팩트는 삭제되지 않습니다.

이 엔드포인트에 대한 요청은 삭제 가능한 모든 Job 아티팩트의 만료 시간을 현재 시간으로 설정합니다. 그런 다음 만료된 Job 아티팩트의 정기적인 정리의 일부로 파일이 시스템에서 삭제됩니다. Job 로그는 삭제되지 않습니다.

정기적인 정리는 일정에 따라 비동기적으로 발생하므로 아티팩트가 삭제되기 전에 짧은 지연이 있을 수 있습니다.

사전 요구 사항:

  • 프로젝트에 대한 Maintainer 또는 Owner 권한이 있어야 합니다.
DELETE /projects/:id/artifacts

지원되는 속성:

속성 유형 필수 여부 설명
id integer or string Yes 프로젝트의 ID 또는 URL 인코딩된 경로.

성공 시 202 Accepted를 반환합니다.

요청 예시:

curl --request DELETE \
  --header "PRIVATE-TOKEN: <your_access_token>" \
  --url "https://gitlab.example.com/api/v4/projects/1/artifacts"

문제 해결#

머지 리퀘스트 파이프라인과 함께 브랜치 이름 사용#

브랜치 이름을 ref_name으로 사용하여 Job 아티팩트를 다운로드하려고 할 때 404 Not Found 오류가 발생할 수 있습니다.

이 이슈는 머지 리퀘스트 파이프라인이 브랜치 파이프라인과 다른 참조 형식을 사용하기 때문에 발생합니다. 머지 리퀘스트 파이프라인은 소스 브랜치에 직접 실행되는 것이 아니라 refs/merge-requests/:iid/head에서 실행됩니다.

머지 리퀘스트 파이프라인의 Job 아티팩트를 다운로드하려면 브랜치 이름 대신 refs/merge-requests/:iid/headref_name으로 사용하세요. 여기서 :iid는 머지 리퀘스트 ID입니다. 머지 리퀘스트 파이프라인에서 ID는 $CI_MERGE_REQUEST_IID 변수에서, 전체 ref_name$CI_MERGE_REQUEST_REF_PATH 변수에서 사용할 수 있습니다.

예를 들어, 머지 리퀘스트 !123의 경우:

curl --location \
  --header "PRIVATE-TOKEN: <your_access_token>" \
  --url "https://gitlab.example.com/api/v4/projects/1/jobs/artifacts/refs/merge-requests/123/head/raw/file.txt?job=test"

artifacts:reports 파일 다운로드#

Job 아티팩트 API를 사용하여 보고서를 다운로드하려고 할 때 404 Not Found 오류가 발생할 수 있습니다.

이 이슈는 보고서가 기본적으로 다운로드 가능하지 않기 때문에 발생합니다.

보고서를 다운로드 가능하게 하려면 파일 이름 또는 gl-*-report.jsonartifacts:paths에 추가하세요.