개요
2025.02.06-[GitLab] 파이프라인 구성에서 간단한 GitLab 파이프라인을 구성하고 테스트를 수행하며 GitLab 파이프라인은 기본적으로 원격 저장소에 커밋이 발생할 때 트리거된다는 것을 알게 되었다.
그런데, 파이프라인의 트리거 종류에 따라서 파이프라인의 유형을 구분할 수 있는 것을 알게 되었다.
이번 글에서는 트리거 방식에 따른 파이프라인의 유형을 정리한다.
브랜치 파이프라인
브랜치 파이프라인은 브랜치에 변경 사항을 커밋할 때마다 파이프라인이 실행된다. 기본적으로 실행되는 방식이기 때문에 별도의 구성이 필요하지 않다.
브랜치 파이프라인은 GitLab에 의해 사전 정의된 변수에 접근할 수 있으며, 브랜치가 Protected 상태인 경우 Protected Variable, Protected Runner에 접근할 수 있다.
Protected Variable
Protected Runner
태그 파이프라인
태그 파이프라인은 새 태그를 생성하거나 푸시할 때마다 실행된다. 브랜치 파이프라인과 동일하게 별도 구성을 필요로 하지 않고 원격 저장소에 변경이 발생할 때 바로 트리거 된다.
브랜치 파이프라인과 마찬가지로 태그가 Protected 태그라면 Protected Variable, Protected Runner에 접근할 수 있다.
Protected Tag는 태그 생성 후 레포지터리 설정 페이지에서 설정할 수 있다.
MR(Merge Request) 파이프라인
MR 파이프라인은 MR에서 Source Branch를 변경할 때마다 파이프라인이 실행된다. MR 파이프라인을 실행하기 위해서는 .gitlab-ci.yml 파일에 다음과 같은 rules 정의가 필요하다.
job1:
script:
- echo "This job runs in merge request pipelines"
rules:
- if: $CI_PIPELINE_SOURCE == 'merge_request_event'
Job 각각이 아니라 전체 파이프라인에 대한 조건을 설정할 때는 다음과 같이 workflow 속성을 추가한다.
workflow:
rules:
- if: $CI_PIPELINE_SOURCE == 'merge_request_event'
job1:
script:
- echo "This job runs in merge request pipelines"
다만 workflow 속성은 기본적으로 MR, Tag, 기본 브랜치에 대해 파이프라인을 실행하도록 구성한다.
workflow:
rules:
- if: $CI_PIPELINE_SOURCE == 'merge_request_event'
- if: $CI_COMMIT_TAG
- if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
기타 유형
아래 유형의 파이프라인은 GitLab Premium 라이선스 이상에서 사용할 수 있다.
Merge Results 파이프라인
Merge Results 파이프라인은 MR 파이프라인의 유형 중 하나로 Source와 Target 브랜치가 병합된 결과에서 실행된다.
파이프라인을 실행하는 순간 존재하는 Target 브랜치에 대해 실행하므로, 시간이 지남에 따라 Target 브랜치가 변경된 경우 다시 실행하여 확인해야 한다. Source와 Target 간 변경 사항에서 충돌이 발생하는 경우에는 Merge results 파이프라인을 실행할 수없기 때문에 MR 파이프라인으로 실행된다.
Merge Trains
기본 브랜치에 자주 병합되는 프로젝트에서는 서로 다른 MR의 변경 사항이 서로 충돌할 수 있다. 이때 Merge Trains를 사용하면 MR을 대기열에 넣은 뒤, 각 MR을 이전의 다른 MR과 비교하고 모두 함께 동작하는지 확인한다.
Merge result 파이프라인과 유사하다고 생각할 수 있지만, 다른 사람들이 동시에 병합하는 내용에 대한 보장을 할 수 있다는 점에 차이가 있다.
참고 문서
https://docs.gitlab.com/ee/ci/pipelines/pipeline_types.html
https://docs.gitlab.com/ee/ci/pipelines/merge_request_pipelines.html
https://docs.gitlab.com/ee/ci/pipelines/merged_results_pipelines.html