#TIL #gitlab CI/CD 파이프라인 시작 조건을 rules로 제어
gitlab CI/CD 파이프라인 rules 설정 파라미터를 사용하면 특정 조건에만 파이프라인을 시작할 수 있다.
rules:
- if: '$CI_COMMIT_REF_NAME == "master" || $CI_COMMIT_REF_NAME =~ /^deploy_.*$/'
changes:
- src/*
- src/**/*
- data_table/*
- data_table/**/*
when: always
- if: '$CI_PIPELINE_SOURCE == "web"'
when: manual
master 브랜치와 deploy_ 문자열로 시작하는 브랜치에 머지하고 특정 디렉터리 파일이 변경됐을 때, 실행한다. 웹에서 버튼을 눌러 시작했을 때, 동작을 다르게 할 수 있다. 웹에서 버튼을 누르면 조건 검사를 하지 않고 무조건 파이프라인을 시작한다.
12.3.5 버전 기준으로 only/except 설정 파라미터도 있지만 언제 변경될 지 모른다는 경고가 있다. 복잡하지만 사라질 위험이 적은 rules를 사용했다.
trigger:
script:
- 'TOKEN="PRIVATE-TOKEN: XXXXXXXXXXXXXXXXXXXXXXXX"'
- export LAST_COMMIT=$(curl --header "$TOKEN" "$API_URL" | python -c "import sys, json; print json.load(sys.stdin)[1]['sha']")
- echo "" >trigger_variables
- if git diff $LAST_COMMIT HEAD --name-only|grep "src/|data_table/"; then
- echo 'export TRIGGER="true"' >>trigger_variables
- fi
stage: trigger
artifacts:
paths:
- trigger_variables
rules 설정 파라미터가 나오기 전에는 첫 파이프라인 스테이지에서 변경 사항을 직접 조사했다. 파이프라인 스테이지 간 정보를 주고받는 방법이 없어서 파일로 만들어서 artifacts로 다음 스테이지에 전달한다.
예전 방식도 그럭저럭 동작은 했다. 파이프라인 시작 후 검사해서 시작은 했지만, 조건에 안 맞아 실행은 안 한 파이프라이이 많다. 파이프라인이 연속으로 여러 개 생기면 gitlab이 파이프라인을 취소시키는 최적화를 한다. 특정 디렉터리 변경 사항을 관찰하고 실행하는 설정을 알 리 없는 gitlab이 중요한 파이프라인을 취소시키곤 했다.