레이블이 CI/CD인 게시물을 표시합니다. 모든 게시물 표시
레이블이 CI/CD인 게시물을 표시합니다. 모든 게시물 표시

20190422

GitLab CI 파이프라인 리팩터

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에 들어온다고 해서 그때 다시 정리 예정.