잡 아티팩트

잡 아티팩트 (Job artifacts)

잡은 작업 결과로 파일과 디렉터리 묶음을 출력할 수 있는데, 이 출력물을 잡 아티팩트라고 해요. 빌드 결과물이나 리포트 파일이 대표적이죠. 기본적으로 뒤에 실행되는 잡들은 이전 스테이지에 있던 잡들이 만든 아티팩트를 전부 가져옵니다.

출처: GitLab Docs — Job artifacts

아티팩트 만들기

잡 아티팩트는 .gitlab-ci.yml 파일에서 artifacts 키워드로 만들어요.

pdf:
  script:
    - xelatex mycv.tex
  artifacts:
    paths:
      - mycv.pdf

이 예시에서 pdf라는 잡이 xelatex 명령으로 LaTeX 소스 mycv.tex에서 PDF 파일을 만들어요. 그 결과물인 mycv.pdf가 아티팩트로 저장되는 구조죠.

만료 시간 지정하기

아티팩트를 얼마나 GitLab이 보관할지는 expire_in 키워드로 정해요.

pdf:
  script:
    - xelatex mycv.tex
  artifacts:
    paths:
      - mycv.pdf
    expire_in: 1 week

expire_in을 정의하지 않으면 인스턴스 설정의 기본 아티팩트 만료 값이 적용됩니다. 아티팩트가 만료되지 않게 하려면 잡 상세 페이지에서 Keep을 선택하면 되는데, 만료 기간이 없는 아티팩트에는 이 옵션이 없어요. 그리고 기본적으로 각 ref에서 가장 최근에 성공한 파이프라인의 아티팩트는 항상 보관돼요.

변수 확장 지원

artifacts:name, artifacts:paths, artifacts:exclude에는 변수 확장이 지원돼요. 여기서는 셸이 아니라 GitLab Runner 내부의 변수 확장 메커니즘이 쓰이며, 이 자리에서는 CI/CD 변수만 확장할 수 있습니다.

아티팩트 다운로드하기

아티팩트는 GitLab UI 또는 API로 내려받을 수 있어요. API를 쓸 때는 잡 이름과 브랜치로 최신 아티팩트를 받거나, 잡 ID로 특정 리포트를 겨냥하는 방식이 있어요.

잡 이름과 브랜치 방식은 부모·자식 파이프라인에서 부모부터 자식 순서로 아티팩트를 찾아요. 예를 들어 부모와 자식 파이프라인에 같은 이름의 잡이 있다면 부모 파이프라인의 아티팩트가 반환됩니다.

잡 ID로 다운로드할 때 JUnit 테스트 결과 같은 리포트 아티팩트는 기본 아카이브에 포함되지 않아요. 리포트 파일을 받으려면 잡 ID에 file_type을 더해 URL을 호출해야 합니다.

https://gitlab.com/api/v4/projects/<project-id>/jobs/<job-id>/artifacts?file_type=junit

같은 파이프라인 안의 잡이 아티팩트를 가져오게 하려면 needs:artifacts 키워드를 쓰면 돼요.

MR UI에서 아티팩트 링크하기

artifacts:expose_as 키워드로 머지 요청(MR) UI에서 아티팩트에 바로 접근하게 할 수 있어요. 파일이 하나인 아티팩트라면 이렇게 지정합니다.

test:
  script:
    - "echo 'test' > file.txt"
  artifacts:
    expose_as: 'artifact 1'
    paths:
      - 'file.txt'

이렇게 하면 MR 페이지에서 아티팩트 링크를 눌러 바로 열어볼 수 있어요.

가장 최근 성공 잡의 아티팩트 보관

같은 ref에서 새 파이프라인이 성공하면, 이전 파이프라인의 아티팩트는 expire_in 설정에 따라 삭제되고 새 파이프라인의 아티팩트는 자동으로 보관돼요. 이 보관 동작을 끄면 이후 만들어진 모든 새 아티팩트가 expire_in대로 만료됩니다. 옛 파이프라인의 아티팩트는 같은 ref에서 새 파이프라인이 돌기 전까지 계속 유지되다가, 새 파이프라인이 돌면 그때부터 만료가 허용돼요.

더 알아보기