gitlab-ci 11.x 파이프라인 오래 방치했다가 전면 정리. 원래 build → test → deploy 직렬 3단계였는데 뭐가 뭔지도 모르는 스크립트 덩어리였음.
정리 원칙 세 개만.
1. job은 한 가지만 한다. build-and-test 이런 거 금지. 실패 원인 추적 안 됨.
2. 공통은 .template 숨김 job으로. extends로 끌어오기. 이게 생각보다 강력.
.docker-base:
image: docker:stable
services:
- docker:dind
before_script:
- docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
build:
extends: .docker-base
stage: build
script:
- docker build -t $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA .
- docker push $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA
3. cache는 branch 기준, artifacts는 job 간 전달용. 섞어 쓰면 꼬인다. pip 캐시는 cache, 빌드 산출물은 artifacts.
cache:
key: ${CI_COMMIT_REF_SLUG}
paths:
- .cache/pip/
needs: 키워드가 이번 버전에 들어오면서 DAG 순서로 병렬 돌리는 게 가능해졌다. 기존 3단계가 약 9분 걸렸는데 병렬로 재배치 후 4분 30초. 생각보다 크다.
rules: 아직 only/except 기반으로 남김. rules가 12에 들어온다고 해서 그때 다시 정리 예정.