CI/CD 스터디 05: Artifact, Cache, Registry, Versioning
CI/CD에서 artifact, cache, container registry, 이미지 tag/digest, BuildKit cache, SBOM을 구분해 운영하는 방법을 정리합니다.
빌드가 끝나면 결과물이 남습니다. 그 결과물을 어떻게 저장하고 다음 단계로 넘길지 결정하는 컴포넌트가 artifact, cache, registry입니다.
Artifact와 Cache의 차이
artifact와 cache를 혼동하면 파이프라인이 느려지고 재현성도 깨집니다. cache는 다시 받아도 되는 의존성 저장소이고, artifact는 특정 job이 만들어 다음 job 또는 사람에게 전달해야 하는 결과물입니다.
| 구분 | 목적 | 예시 | 주의점 |
|---|---|---|---|
| cache | 속도 개선 | npm cache, Maven repository, pip wheel | cache가 없어도 빌드가 성공해야 합니다. |
| artifact | 결과 전달 | dist/, jar, test report, SBOM | 어떤 commit에서 나온 결과인지 추적해야 합니다. |
| registry | 배포 대상 저장 | container image, package, chart | tag 재사용보다 digest 추적이 안전합니다. |
GitLab cache와 artifact 예시
stages: [ test, build ]
default:
image: node:22-alpine
cache:
key:
files:
- package-lock.json
paths:
- .npm/
test:
stage: test
script:
- npm ci --cache .npm --prefer-offline
- npm test
build:
stage: build
script:
- npm ci --cache .npm --prefer-offline
- npm run build
artifacts:
paths:
- dist/
expire_in: 7 days이미지 tag와 digest
운영 배포는 사람이 읽기 쉬운 tag와 불변 digest를 같이 기록해야 합니다. tag는 편하지만 재사용될 수 있고, digest는 길지만 정확합니다.
IMAGE=registry.example.com/team/app
VERSION=v1.4.0
SHORT_SHA=$(git rev-parse --short=12 HEAD)
docker buildx build --tag ${IMAGE}:${VERSION} --tag ${IMAGE}:sha-${SHORT_SHA} --push .
docker buildx imagetools inspect ${IMAGE}:${VERSION}BuildKit cache
컨테이너 빌드가 느리면 registry cache를 분리해서 운영하는 것이 좋습니다. application image와 cache image를 분리하면 cache를 정리해도 운영 image를 건드리지 않을 수 있습니다.
IMAGE=registry.example.com/team/app
CACHE=registry.example.com/team/app-build-cache
VERSION=v1.4.0
docker buildx build --cache-from type=registry,ref=${CACHE}:main --cache-to type=registry,ref=${CACHE}:main,mode=max --tag ${IMAGE}:${VERSION} --push .SBOM과 provenance
운영에 배포한 artifact가 어떤 dependency로 만들어졌는지 추적하려면 SBOM을 별도 artifact로 남깁니다. 이미지 digest, Git commit, build runner, toolchain version을 같이 기록하면 나중에 취약점이 나왔을 때 영향 범위를 빨리 찾을 수 있습니다.
# 예시: 이미지 digest와 SBOM 파일을 release evidence로 보관
IMAGE=registry.example.com/team/app:v1.4.0
docker buildx imagetools inspect ${IMAGE} > evidence-image.txt
syft ${IMAGE} -o spdx-json > sbom.spdx.json
sha256sum evidence-image.txt sbom.spdx.json > evidence.sha256실무 점검 목록
- cache는 빌드 성공 조건이 아니라 속도 개선 도구로만 취급합니다.
- artifact 보존 기간을 정합니다. 테스트 리포트와 release artifact의 보존 기간은 다릅니다.
- 운영 배포에는 tag만 쓰지 말고 digest 또는 immutable version을 기록합니다.
- registry cleanup 정책이 release artifact를 지우지 않는지 확인합니다.
- 빌드 결과를 다음 job에 넘길 때 workspace 재사용에 기대지 말고 artifact로 넘깁니다.