GitLab CI/CD 파이프라인
GitLab CI/CD 파이프라인 (Pipelines)
파이프라인은 GitLab CI/CD의 전체 흐름을 담는 최상위 개념이에요. 코드를 빌드하고, 테스트하고, 배포하는 모든 단계가 하나의 파이프라인 안에서 이어집니다. 파이프라인은 .gitlab-ci.yml 파일로 정의하고, 코드를 푸시하거나 스케줄, 다른 파이프라인 등으로 트리거해 실행해요.
파이프라인을 이루는 세 가지
파이프라인은 크게 세 가지로 구성돼요.
- 전역 YAML 키워드: 프로젝트 파이프라인의 전체 동작을 제어하는 키워드예요.
- 잡 (Jobs): 명령을 실행해 한 가지 일을 끝내는 실행 단위예요. 컴파일, 테스트, 배포 같은 일이 각각 하나의 잡이죠. 잡은 서로 독립적으로 돌고, 러너가 실행합니다.
- 스테이지 (Stages): 잡을 어떻게 묶을지 정의하는 그룹이에요. 스테이지는 순서대로 실행되고, 같은 스테이지 안의 잡들은 병렬로 돌 수 있어요.
예를 들어 초반 스테이지에는 코드를 lint하고 컴파일하는 잡을, 뒤쪽 스테이지에는 테스트하고 배포하는 잡을 둘 수 있죠. 한 스테이지의 잡이 전부 성공해야 다음 스테이지로 넘어가요. 반대로 스테이지 안의 어떤 잡이라도 실패하면 다음 스테이지는 실행되지 않습니다.
스테이지 순서 예시
build → test → deploy처럼 세 스테이지를 구성한다고 생각해 볼게요.
build스테이지에compile이라는 잡을 두고 프로젝트 코드를 컴파일합니다.test스테이지에test1,test2두 잡을 두고 코드를 검증해요. 이 테스트 잡들은compile이 성공한 뒤에만 실행됩니다.deploy스테이지에deploy-to-production잡이 배포를 담당하죠.
이렇게 스테이지 단위로 순서를 강제하면, 빌드가 실패한 코드를 테스트하거나 배포하는 일이 없어져요.
파이프라인 구성하기
.gitlab-ci.yml 최상위에 잡을 정의하면 파이프라인에 포함됩니다. 잡을 추가할 때 잡의 이름은 YAML에서 고유해야 하고, 파이프라인 트리거 방식에 따라 수동 버튼을 넣을 수도 있어요. 파이프라인이 더 이상 필요 없으면 삭제할 수 있는데, 파이프라인을 삭제하면 관련된 모든 캐시와 잡, 로그, 아티팩트, 트리거가 함께 사라지니 되돌릴 수 없다는 점을 명심하세요.
파이프라인 보기
파이프라인 세부 페이지에서는 잡을 스테이지 기준으로 묶어 보거나, needs 키워드로 연결된 잡 의존성 기준으로 묶어 볼 수 있어요. needs는 잡 사이의 의존 관계를 직접 지정하는 키워드예요.
예를 들어 lint-job이 needs: []로 설정돼 아무 잡에도 의존하지 않는다면, 스테이지상으로는 test에 있어도 첫 번째 열에 표시됩니다. 반면 test-job1이 build-job1에, test-job2가 build-job1과 build-job2 둘 다에 의존한다면 두 테스트 잡은 두 번째 열에 뜨죠.
파이프라인 미니 그래프는 항상 스테이지 기준으로 잡을 묶어 보여줘요. 각 스테이지에 마우스를 올리면 이름과 상태가 보이고, 스테이지를 누르면 그 안의 잡 목록이 펼쳐집니다.