Read the config and answer what runs
한국어 원문으로 표시합니다.
목표
.gitlab-ci.yml 은 프로그램이 아니라 선언입니다. 그래서 "돌려 보면 안다" 가
아니라 읽어서 답할 수 있어야 합니다. 파이프라인이 예상과 다르게 도는 사고는
거의 전부 이 파일을 잘못 읽어서 납니다.
여기서는 GitLab 없이, 설정만 보고 답을 냅니다.
재료
/opt/lab/glci/pipeline.yml 잡 다섯 개짜리 파이프라인
/opt/lab/glci/broken.yml 문법은 맞는데 뜻이 틀린 곳이 네 군데
mkdir -p /root/glci && cp /opt/lab/glci/* /root/glci/ && cd /root/glci
남길 것
01-jobs.txt 잡과 템플릿
02-vars.txt 같은 변수의 세 값
03-rules.txt 상황마다 도는 잡
04-broken.txt 틀린 네 군데와 고치는 법
fixed.yml 고친 파일
check.py 같은 실수를 다시 막는 검사
07-notes.md 왜 그런지
무엇이 잡이고 무엇이 아닌가
pipeline.yml 에서 실제 잡이 몇 개이고 이름이 무엇인지 01-jobs.txt 에 적고, .base 가 왜 잡이 아닌지 한 줄 덧붙이세요.
이름이 점으로 시작하는 항목은 숨겨진 템플릿이라 실행되지 않습니다. extends 로 가져다 쓰기만 합니다.
stages·variables 같은 예약어도 잡이 아닙니다. 잡은 다섯입니다.
같은 이름의 변수가 셋
RETRIES 가 세 곳에 있습니다. build · unit · lint 각각에서 실제로 쓰이는 값이 얼마인지 02-vars.txt 에 적고, 왜 그 값이 이기는지 한 줄 적으세요.
전역 variables 가 가장 약하고, 템플릿(.base)이 그다음, 잡 자신의 variables 가 가장 셉니다.
build 와 unit 은 .base 를 상속만 하고, lint 는 자기 값을 따로 둡니다.
언제 무엇이 도는가
main 브랜치 푸시 · 머지 리퀘스트 · 태그 세 상황에서 각각 어느 잡이 도는지 03-rules.txt 에 적으세요. 각 상황을 그 낱말(main·머지·태그)로 시작하는 줄로 구분합니다.
rules 는 위에서부터 보다가 처음 맞는 것에서 멈춥니다. 아무것도 안 맞으면 그 잡은 돌지 않습니다.
when: never 만 있는 마지막 줄이 "그 외에는 안 돈다" 를 뜻합니다.
deploy-prod 는 태그에서 when: manual 이라 파이프라인에는 나타나지만 사람이 눌러야 돕니다. 그것도 "돈다" 에 넣되 수동이라고 적으세요.
문법은 맞는데 뜻이 틀린 곳
broken.yml 에서 네 군데를 찾아 04-broken.txt 에 적고, 각각 어떻게 고치는지도 쓰세요.
YAML 로는 전부 읽힙니다. 틀린 것은 GitLab 의 규칙입니다.
- 한 잡이
only와rules를 함께 쓸 수 있을까요 stages에 없는 단계를 적으면 어떻게 될까요needs로 뒤 단계의 잡을 기다릴 수 있을까요- 단계 사이로 파일을 넘기는 것은
cache일까요artifacts일까요
고쳐서 파일로 남긴다
네 군데를 실제로 고친 fixed.yml 을 만드세요. 잡은 하나도 없애지 않습니다.
고칠 때 잡을 지우면 검사는 통과하지만 파이프라인의 뜻이 달라집니다. 하던 일은 그대로 두고 표현만 고치세요.
publish 는 cache 를 지우고, build 가 만든 artifacts 를 받게 합니다. 같은 파이프라인 안에서는 앞 단계의 artifacts 가 자동으로 내려오므로, 좁히고 싶을 때만 dependencies 를 적습니다.
같은 실수를 기계가 막게 한다
check.py 를 만들어 broken.yml 은 막고 fixed.yml 은 통과시키세요. 인자로 받은 파일을 검사하고, 문제가 있으면 0이 아닌 값으로 끝냅니다.
네 가지를 봅니다: stages 에 없는 단계, only/except 와 rules 의 동거, 뒤 단계를 기다리는 needs, 그리고 단계 간 전달을 cache 로 하려는 것.
막지 못하는 검사는 검사가 아니고, 고친 것까지 막는 검사는 아무도 안 씁니다. 두 파일로 양쪽을 확인하세요.
다음에 읽을 사람에게
여기서 본 것 중 넷 이상을 골라 07-notes.md 에 정리하세요. 무엇을 했는지가 아니라 왜 그런지를 적습니다.
파이프라인이 예상과 다르게 돌 때의 자신이 읽는다고 생각하세요. "rules 를 봤다" 는 도움이 안 되고, "rules 는 첫 일치에서 멈추므로 아래에 적은 조건은 위가 맞으면 영영 안 본다" 는 도움이 됩니다.