- 작업 아티팩트 생성
- 작업이 아티팩트를 가져오지 않도록 방지
- 프로젝트 내 모든 작업 아티팩트 보기
- 작업 아티팩트 다운로드
- 아티팩트 아카이브의 내용 탐색
- 작업 로그 및 아티팩트 삭제
- 머지 요청 UI에서 작업 아티팩트 링크
- 가장 최근 성공한 작업의 아티팩트 유지
작업 아티팩트
Offering: GitLab.com, Self-managed, GitLab Dedicated
작업은 파일과 디렉터리의 아카이브를 출력할 수 있습니다. 이 출력은 작업 아티팩트로 알려져 있습니다.
GitLab UI 또는 API를 사용하여 작업 아티팩트를 다운로드할 수 있습니다.
작업 아티팩트에 대한 개요는 GitLab CI 파이프라인, 아티팩트 및 환경 비디오를 시청하세요.
또는 소개를 원하시면 초보자를 위한 GitLab CI 파이프라인 튜토리얼를 시청하세요.
작업 아티팩트 저장소에 대한 관리 정보는 작업 아티팩스 관리를 참조하세요.
작업 아티팩트 생성
작업 아티팩트를 생성하려면 .gitlab-ci.yml
파일에서 artifacts
키워드를 사용하세요:
pdf:
script: xelatex mycv.tex
artifacts:
paths:
- mycv.pdf
이 예제에서 pdf
라는 작업은 LaTeX 소스 파일 mycv.tex
로부터 PDF 파일을 생성하기 위해 xelatex
명령을 호출합니다.
paths
키워드는 작업 아티팩트에 추가할 파일을 결정합니다.
모든 파일 및 디렉터리에 대한 경로는 작업이 생성된 저장소에 상대적입니다.
와일드카드 사용
경로 및 디렉터리에 대해 와일드카드를 사용할 수 있습니다.
예를 들어, xyz
로 끝나는 디렉터리 내의 모든 파일을 포함하는 아티팩트를 생성하려면 다음과 같이 합니다:
job:
script: echo "build xyz project"
artifacts:
paths:
- path/*xyz/*
만료 기간 설정
expire_in
키워드는 GitLab이 artifacts:paths
에 정의된 아티팩트를 얼마나 오랫동안 보관할지를 결정합니다.
예를 들어:
pdf:
script: xelatex mycv.tex
artifacts:
paths:
- mycv.pdf
expire_in: 1 week
expire_in
이 정의되지 않으면 인스턴스 전체 설정이 사용됩니다.
아티팩트가 만료되는 것을 방지하려면 작업 세부 정보 페이지에서 Keep를 선택할 수 있습니다. 만약 아티팩트의 만료 기간이 설정되지 않았다면 이 옵션은 사용할 수 없습니다.
기본적으로 최신 아티팩트는 항상 보관됩니다.
동적으로 정의된 이름으로
CI/CD 변수를 사용하여 아티팩트 파일 이름을 동적으로 정의할 수 있습니다.
예를 들어, 현재 작업의 이름으로 아카이브를 생성하려면:
job:
artifacts:
name: "$CI_JOB_NAME"
paths:
- binaries/
현재 브랜치 또는 태그의 이름으로 아카이브를 생성하면서 이진 디렉터리만 포함하려면:
job:
artifacts:
name: "$CI_COMMIT_REF_NAME"
paths:
- binaries/
브랜치 이름에 슬래시가 포함되어 있으면(예: feature/my-feature
) 아티팩트의 적절한 이름 지정을 위해 $CI_COMMIT_REF_SLUG
를 대신 사용하세요.
Windows 런너 또는 셸 실행기와 함께
Windows Batch를 사용하여 셸 스크립트를 실행하는 경우 $
를 %
로 교체해야 합니다:
job:
artifacts:
name: "%CI_JOB_STAGE%-%CI_COMMIT_REF_NAME%"
paths:
- binaries/
Windows PowerShell을 사용하여 셸 스크립트를 실행하는 경우 $
를 $env:
로 교체해야 합니다:
job:
artifacts:
name: "$env:CI_JOB_STAGE-$env:CI_COMMIT_REF_NAME"
paths:
- binaries/
제외된 파일 없이
artifacts:exclude
를 사용하여 파일이 아티팩트 아카이브에 추가되는 것을 방지합니다.
예를 들어, binaries/
내 모든 파일을 저장하지만 binaries/
하위 디렉토리에 위치한 *.o
파일은 제외합니다.
artifacts:
paths:
- binaries/
exclude:
- binaries/**/*.o
artifacts:paths
와 달리, exclude
경로는 재귀적이지 않습니다.
디렉토리의 모든 내용을 제외하려면 디렉토리 자체를 매칭하기 보다는 명시적으로 매칭해야 합니다.
예를 들어, binaries/
내 모든 파일을 저장하지만 temp/
하위 디렉토리에 있는 파일은 제외하려면:
artifacts:
paths:
- binaries/
exclude:
- binaries/temp/**/*
추적되지 않은 파일과 함께
artifacts:untracked
를 사용하여 모든 Git 추적되지 않은 파일을 아티팩트로 추가합니다 (및 artifacts:paths
에서 정의된 경로와 함께).
추적되지 않은 파일은 리포지토리에 추가되지 않았지만 리포지토리 체크아웃에 존재하는 파일입니다.
예를 들어, 모든 Git 추적되지 않은 파일과 binaries
내의 파일을 저장하려면:
artifacts:
untracked: true
paths:
- binaries/
예를 들어, 모든 추적되지 않은 파일을 저장하지만 제외하고 *.txt
파일은 제외하려면:
artifacts:
untracked: true
exclude:
- "*.txt"
작업이 아티팩트를 가져오지 않도록 방지
작업은 기본적으로 이전 단계의 완료된 작업에서 모든 아티팩트를 다운로드합니다.
작업이 아티팩트를 다운로드하지 않도록 하려면, dependencies
를 빈 배열 ([]
)로 설정합니다:
job:
stage: test
script: make build
dependencies: []
프로젝트 내 모든 작업 아티팩트 보기
- GitLab 15.6에서 개선된 모습.
- GitLab 15.9에서 개선된 성능.
- GitLab 16.0에서 일반적으로 사용 가능. 기능 플래그
artifacts_management_page
가 제거되었습니다.
프로젝트에 저장된 모든 아티팩트를 Build > Artifacts 페이지에서 볼 수 있습니다. 이 목록에는 모든 작업과 관련된 아티팩트가 표시됩니다. 항목을 확장하여 작업과 관련된 모든 아티팩트에 접근할 수 있습니다:
-
artifacts:
키워드로 생성된 아티팩트. - 보고서 아티팩트.
- 내부적으로 별도의 아티팩트로 저장된 작업 로그 및 메타데이터.
이 목록에서 개별 아티팩트를 다운로드하거나 삭제할 수 있습니다.
작업 아티팩트 다운로드
다음에서 작업 아티팩트를 다운로드할 수 있습니다:
- 모든 Pipelines 목록. 파이프라인 오른쪽에서 Download artifacts ()를 선택합니다.
- 모든 Jobs 목록. 작업 오른쪽에서 Download artifacts ()를 선택합니다.
- 작업 세부 정보 페이지. 페이지 오른쪽에서 Download를 선택합니다.
- 병합 요청 Overview 페이지. 최신 파이프라인 오른쪽에서 Artifacts ()를 선택합니다.
- Artifacts 페이지. 작업 오른쪽에서 Download ()를 선택합니다.
- 아티팩트 브라우저. 페이지 상단에서 Download artifacts archive ()를 선택합니다.
보고서 아티팩트는 Pipelines 목록이나 Artifacts 페이지에서만 다운로드할 수 있습니다.
최신 성공적인 파이프라인에서 작업 아티팩트를 다운로드하려면 작업 아티팩트 API를 사용합니다.
작업 아티팩트 API를 사용하여 보고서 아티팩트를 다운로드할 수 없습니다.
보고서가 artifacts:paths
로 일반 아티팩트로 추가되지 않는 한 아티팩트는 다운로드할 수 없습니다.
URL에서
특정 작업에 대한 아티팩트 아카이브를 공개적으로 접근 가능한
URL을 사용하여 다운로드할 수 있습니다
작업 아티팩트 API.
예를 들어:
-
GitLab.com
의 프로젝트에서main
브랜치의build
라는 이름의 최신 아티팩트를 다운로드하려면:https://gitlab.com/api/v4/projects/<project-id>/jobs/artifacts/main/download?job=build
-
GitLab.com
의 프로젝트에서main
브랜치의build
라는 이름의 최신 작업에서review/index.html
파일을 다운로드하려면:https://gitlab.com/api/v4/projects/<project-id>/jobs/artifacts/main/raw/review/index.html?job=build
이 엔드포인트에서 반환된 파일은 항상
plain/text
콘텐츠 유형을 가집니다.
두 예제에서 <project-id>
를 유효한 프로젝트 ID로 바꿉니다. 프로젝트 ID는 다음에서 찾을 수 있습니다
프로젝트 개요 페이지.
부모 및 자식 파이프라인의 아티팩트는
부모에서 자식 순으로 계층적으로 검색됩니다. 예를 들어, 부모와 자식 파이프라인 모두
같은 이름의 작업이 있는 경우, 부모 파이프라인의 작업 아티팩트가 반환됩니다.
CI/CD 작업 토큰 사용
CI/CD 작업 토큰을 사용하여
작업 아티팩트 API 엔드포인트에 인증하고
다른 파이프라인에서 아티팩트를 가져올 수 있습니다. 아티팩트를 검색할 작업을
지정해야 합니다. 예를 들어:
build_submodule:
stage: test
script:
- apt update && apt install -y unzip
- curl --location --output artifacts.zip "https://gitlab.example.com/api/v4/projects/1/jobs/artifacts/main/download?job=test&job_token=$CI_JOB_TOKEN"
- unzip artifacts.zip
아티팩트 아카이브의 내용 탐색
로컬에 아티팩트를 다운로드하지 않고도 UI에서
아티팩트의 내용을 탐색할 수 있습니다:
- 모든 작업 목록에서. 작업의 오른쪽에서 탐색을 선택합니다 ().
- 작업 상세 페이지에서. 페이지의 오른쪽에서 탐색을 선택합니다.
- 아티팩트 페이지에서. 작업의 오른쪽에서 탐색을 선택합니다 ().
GitLab Pages가 전역적으로 활성화되면,
프로젝트 설정에서 비활성화되어 있어도 브라우저에서 일부 아티팩트 파일 확장자를 미리 볼 수 있습니다.
프로젝트가 내부 또는 비공개인 경우, 미리 보기를 활성화하려면
GitLab Pages 액세스 제어를 활성화해야 합니다.
다음 확장자가 지원됩니다:
파일 확장자 | GitLab.com | 내장 NGINX가 있는 Linux 패키지 |
---|---|---|
.html |
예 | 예 |
.json |
예 | 예 |
.xml |
예 | 예 |
.txt |
아니오 | 예 |
.log |
아니오 | 예 |
URL에서
특정 작업의 최신 성공적인 파이프라인의 작업 아티팩트를
공개적으로 접근 가능한 URL로 탐색할 수 있습니다.
예를 들어, GitLab.com의 main
브랜치에서 build
라는 이름의 작업의 최신 아티팩트를 탐색하려면:
https://gitlab.com/<full-project-path>/-/jobs/artifacts/main/browse?job=build
유효한 프로젝트 경로로 <full-project-path>
를 바꾸세요. 프로젝트 URL에서 찾을 수 있습니다.
작업 로그 및 아티팩트 삭제
경고: 작업 로그 및 아티팩트를 삭제하는 것은 되돌릴 수 없는 파괴적인 행동입니다. 주의해서 사용하세요.
보고서 아티팩트, 작업 로그 및 메타데이터 파일을 포함한 특정 파일을 삭제하는 것은 이러한 파일을 데이터 소스로 사용하는 GitLab 기능에 영향을 미칩니다.
작업의 아티팩트와 로그를 삭제할 수 있습니다.
사전 요건:
- 귀하는 작업의 소유자이거나 프로젝트에 대해 최소 유지 관리자인 사용자여야 합니다.
작업을 삭제하려면:
- 작업의 세부 정보 페이지로 이동합니다.
- 작업 로그의 오른쪽 상단 모서리에서 작업 로그 및 아티팩트 삭제 ()를 선택합니다.
개별 아티팩트는 아티팩트 페이지에서 삭제할 수도 있습니다.
대량 아티팩트 삭제
- GitLab 15.10에 도입됨
ci_job_artifact_bulk_destroy
라는 플래그로. 기본적으로 비활성화되어 있습니다.- GitLab 16.1에서 기능 플래그 제거됨.
여러 아티팩트를 동시에 삭제할 수 있습니다:
- 왼쪽 사이드바에서 검색 또는 이동을 선택하고 프로젝트를 찾습니다.
- 빌드 > 아티팩트를 선택합니다.
- 삭제하려는 아티팩트 옆의 체크박스를 선택합니다. 최대 50개의 아티팩트를 선택할 수 있습니다.
- 선택 항목 삭제를 선택합니다.
머지 요청 UI에서 작업 아티팩트 링크
artifacts:expose_as
키워드를 사용하여 머지 요청 UI에서 작업 아티팩트에 대한 링크를 표시합니다.
예를 들어, 단일 파일이 있는 아티팩트의 경우:
test:
script: ["echo 'test' > file.txt"]
artifacts:
expose_as: 'artifact 1'
paths: ['file.txt']
이 구성으로 GitLab은 관련 머지 요청의 노출된 아티팩트 보기 섹션에 file.txt
에 대한 링크로 artifact 1을 추가합니다.
가장 최근 성공한 작업의 아티팩트 유지
기본적으로 아티팩트는 각 참조의 최신 커밋에 대해 성공적인 파이프라인에 대해 항상 유지됩니다.
모든 expire_in
구성은 최신 아티팩트에 적용되지 않습니다.
파이프라인의 아티팩트는 동일한 참조에 대해 새로운 파이프라인이 실행되는 경우에만 expire_in
구성에 따라 삭제됩니다:
- 성공합니다.
- 실패합니다.
- 수동 작업에 의해 차단되어 실행이 중지됩니다.
또한, 아티팩트는 최신 파이프라인이 아니더라도 참조의 마지막 성공적인 파이프라인에 대해 유지됩니다. 따라서 새로운 파이프라인 실행이 실패할 경우, 마지막 성공적인 파이프라인의 아티팩트는 여전히 유지됩니다.
최신 아티팩트를 유지하는 것은 많은 작업이나 큰 아티팩트가 있는 프로젝트에서 많은 저장 공간을 사용할 수 있습니다.
프로젝트에서 최신 아티팩트가 필요하지 않은 경우 이 동작을 비활성화하여 공간을 절약할 수 있습니다:
- 왼쪽 사이드바에서 검색 또는 이동을 선택하고 프로젝트를 찾습니다.
- 설정 > CI/CD를 선택합니다.
- 아티팩트를 확장합니다.
- 가장 최근 성공한 작업의 아티팩트 유지 체크박스를 해제합니다.
이 설정을 비활성화하는 즉시, 모든 새로운 아티팩트는 expire_in
구성에 따라 만료됩니다.
이전 파이프라인의 아티팩트는 동일한 참조에 대해 새로운 파이프라인이 실행될 때까지 계속 유지됩니다.
그런 다음 해당 참조의 이전 파이프라인 아티팩트도 만료될 수 있습니다.
모든 프로젝트에서 이 동작을 비활성화할 수 있습니다