머지 리퀘스트 파이프라인
Offering: GitLab.com, GitLab Self-Managed, GitLab Dedicated
머지 리퀘스트의 소스 브랜치에 변경 사항을 만들 때마다 파이프라인이 실행되도록 구성할 수 있습니다. 이 파이프라인은 다음과 같은 경우에 실행됩니다: 소스 브랜치와 타겟 브랜치를 병합한 결과를 테스트하는 파이프라인을 실행하려면 병합 결과 파이프라인을 사용하세요.
머지 리퀘스트의 소스 브랜치에 변경 사항을 만들 때마다 파이프라인이 실행되도록 구성할 수 있습니다. 이러한 유형의 파이프라인을 머지 리퀘스트 파이프라인이라고 합니다.
이 파이프라인은 다음과 같은 경우에 실행됩니다:
- 하나 이상의 커밋이 있는 소스 브랜치에서 새 머지 리퀘스트를 생성하는 경우.
- 머지 리퀘스트의 소스 브랜치에 새 커밋을 푸시하는 경우.
- 머지 리퀘스트의 Pipelines 탭으로 이동하여 Run pipeline을 선택하는 경우.
머지 리퀘스트 파이프라인:
- 소스 브랜치의 콘텐츠에서만 실행되며 타겟 브랜치의 콘텐츠는 무시합니다.
- 파이프라인 목록에
merge request레이블을 표시합니다.
소스 브랜치와 타겟 브랜치를 병합한 결과를 테스트하는 파이프라인을 실행하려면 병합 결과 파이프라인을 사용하세요.
전제 조건#
머지 리퀘스트 파이프라인을 사용하려면:
- 프로젝트의
.gitlab-ci.yml파일에CI_PIPELINE_SOURCE == "merge_request_event"와 일치하는 job 규칙이나 워크플로우 규칙이 포함되어 있어야 합니다. - 소스 프로젝트에서 머지 리퀘스트 파이프라인을 실행하려면 Developer, Maintainer, 또는 Owner 권한이 있어야 합니다.
- 저장소는 외부 저장소가 아닌 GitLab 저장소여야 합니다.
머지 리퀘스트 파이프라인 구성#
머지 리퀘스트 파이프라인을 구성하려면 .gitlab-ci.yml 파일에서 CI_PIPELINE_SOURCE가 merge_request_event와 같을 때 실행되도록 job을 구성해야 합니다.
include:에 정의된 규칙(예: include:component 사용)은 이 요구 사항을 충족하지 않습니다. .gitlab-ci.yml에 직접 일치하는 rules: 또는 workflow: rules를 정의해야 합니다.
개별 job에 rules를 구성하거나, workflow: rules를 사용하여 전체 파이프라인을 제어할 수 있습니다.
개별 job 구성#
rules 키워드를 사용하여 머지 리퀘스트 파이프라인에서 실행할 개별 job을 구성하세요. 예시:
job1:
script:
- echo "This job runs in merge request pipelines"
rules:
- if: $CI_PIPELINE_SOURCE == "merge_request_event"
파일 변경에 따라 job이 실행되는 시기를 제어할 수도 있습니다:
test:
script:
- echo "This job always runs in merge request pipelines"
rules:
- if: $CI_PIPELINE_SOURCE == "merge_request_event"
lint:
script:
- echo "This job runs only when JavaScript files change"
rules:
- if: $CI_PIPELINE_SOURCE == "merge_request_event"
changes:
- "*.js"
전체 파이프라인 구성#
workflow: rules 키워드를 사용하여 파이프라인의 모든 job이 머지 리퀘스트 파이프라인에서 실행되도록 구성하세요. 예시:
workflow:
rules:
- if: $CI_PIPELINE_SOURCE == "merge_request_event"
job1:
script:
- echo "This job runs in merge request pipelines"
더 많은 workflow 예시는 다음을 참조하세요:
보안 스캔 도구를 머지 리퀘스트 파이프라인과 함께 사용하려면 CI/CD 변수 AST_ENABLE_MR_PIPELINES 또는 latest 템플릿 버전을 사용하세요.
커스텀 인풋으로 머지 리퀘스트 파이프라인 실행#
히스토리
- GitLab 18.11에서 도입되었습니다.
.gitlab-ci.yml에 파이프라인 인풋이 정의되어 있으면 새 머지 리퀘스트 파이프라인을 수동으로 실행할 때 인풋 값을 커스터마이즈할 수 있습니다. 같은 양식에서 CI/CD 변수도 설정할 수 있습니다.
전제 조건:
.gitlab-ci.yml파일이 머지 리퀘스트 파이프라인을 위해 구성되어 있어야 합니다..gitlab-ci.yml파일에spec: inputs섹션이 정의되어 있어야 합니다.- 소스 프로젝트에서 최소한 Developer 권한이 있어야 합니다.
커스텀 인풋으로 머지 리퀘스트 파이프라인을 실행하려면:
- 왼쪽 사이드바에서 Search or go to를 선택하고 프로젝트를 찾습니다.
- Code > Merge requests를 선택하고 머지 리퀘스트를 엽니다.
- Pipelines 탭을 선택합니다.
- Run pipeline 드롭다운 목록 ( chevron-down )을 선택하고 Run pipeline with modified values를 선택합니다.
- 새 파이프라인 양식이 열리며 머지 리퀘스트의 소스 브랜치로 미리 채워집니다. 인풋 값을 수정하고 필요한 CI/CD 변수를 설정합니다.
- Run pipeline을 선택합니다.
포크 프로젝트에서 사용#
포크에서 작업하는 외부 기여자는 부모 프로젝트에서 파이프라인을 생성할 수 없습니다.
포크에서 부모 프로젝트로 제출된 머지 리퀘스트는 다음과 같은 파이프라인을 트리거합니다:
- 부모(타겟) 프로젝트가 아닌 포크(소스) 프로젝트에서 생성되고 실행됩니다.
- 포크 프로젝트의 CI/CD 구성, 리소스 및 프로젝트 CI/CD 변수를 사용합니다.
포크용 파이프라인은 부모 프로젝트에서 fork 배지와 함께 표시됩니다.
부모 프로젝트에서 파이프라인 실행#
부모 프로젝트의 프로젝트 멤버는 포크 프로젝트에서 제출된 머지 리퀘스트의 머지 리퀘스트 파이프라인을 트리거할 수 있습니다. 이 파이프라인은:
- 포크(소스) 프로젝트가 아닌 부모(타겟) 프로젝트에서 생성되고 실행됩니다.
- 포크 프로젝트의 브랜치에 있는 CI/CD 구성을 사용합니다.
- 부모 프로젝트의 CI/CD 설정, 리소스 및 프로젝트 CI/CD 변수를 사용합니다.
- 파이프라인을 트리거한 부모 프로젝트 멤버의 권한을 사용합니다.
머지 후 파이프라인이 부모 프로젝트에서 통과하도록 포크 프로젝트 MR에서 파이프라인을 실행하세요. 또한 포크 프로젝트의 러너를 신뢰하지 않는 경우, 부모 프로젝트에서 파이프라인을 실행하면 부모 프로젝트의 신뢰할 수 있는 러너를 사용합니다.
포크 머지 리퀘스트에는 머지 전에도 파이프라인이 실행될 때 부모 프로젝트의 시크릿을 도용하려는 악성 코드가 포함될 수 있습니다. 리뷰어로서 파이프라인을 트리거하기 전에 머지 리퀘스트의 변경 사항을 신중하게 확인하세요. API 또는 /rebase 퀵 액션을 통해 파이프라인을 트리거하지 않는 한, GitLab은 파이프라인이 실행되기 전에 수락해야 하는 경고를 표시합니다. 그렇지 않으면 경고가 표시되지 않습니다.
전제 조건:
- 부모 프로젝트의
.gitlab-ci.yml파일이 머지 리퀘스트 파이프라인에서 job을 실행하도록 구성되어 있어야 합니다. - CI/CD 파이프라인을 실행할 권한을 가진 부모 프로젝트의 멤버여야 합니다. 브랜치가 보호된 경우 추가 권한이 필요할 수 있습니다.
- 포크 프로젝트가 파이프라인을 실행하는 사용자에게 공개되어 있어야 합니다. 그렇지 않으면 머지 리퀘스트에 Pipelines 탭이 표시되지 않습니다.
UI를 사용하여 포크 프로젝트의 머지 리퀘스트에 대해 부모 프로젝트에서 파이프라인을 실행하려면:
- 머지 리퀘스트에서 Pipelines 탭으로 이동합니다.
- Run pipeline을 선택합니다. 경고를 읽고 수락해야 하며, 그렇지 않으면 파이프라인이 실행되지 않습니다.
포크 프로젝트의 파이프라인 방지#
부모 프로젝트에서 포크 프로젝트의 새 파이프라인을 실행하지 못하도록 하려면 프로젝트 API를 사용하여 ci_allow_fork_pipelines_to_run_in_parent_project 설정을 비활성화하세요.
설정이 비활성화되기 전에 생성된 파이프라인은 영향을 받지 않으며 계속 실행됩니다. 이전 파이프라인에서 job을 다시 실행하면 해당 job은 파이프라인이 원래 생성되었을 때와 동일한 컨텍스트를 사용합니다.
사용 가능한 사전 정의 변수#
머지 리퀘스트 파이프라인을 사용할 때 다음을 사용할 수 있습니다:
- 브랜치 파이프라인에서 사용 가능한 모든 동일한 사전 정의 변수.
- 머지 리퀘스트 파이프라인의 job에서만 사용할 수 있는 추가 사전 정의 변수.
보호된 변수 및 러너에 대한 접근 제어#
히스토리
- GitLab 18.1에서 도입됨
머지 리퀘스트 파이프라인에서 보호된 CI/CD 변수 및 보호된 러너에 대한 접근을 제어할 수 있습니다.
머지 리퀘스트 파이프라인은 다음 경우에만 이러한 보호된 리소스에 접근할 수 있습니다:
- 소스 브랜치와 타겟 브랜치가 모두 보호되어 있는 경우.
- 파이프라인을 트리거하는 사용자가 타겟 브랜치에 push/merge 접근 권한을 가진 경우.
- 소스 브랜치와 타겟 브랜치가 모두 동일한 프로젝트에 속하는 경우.
포크된 저장소의 머지 리퀘스트 파이프라인은 이러한 보호된 리소스에 접근할 수 없습니다.
전제 조건:
- 프로젝트에서 Maintainer 또는 Owner 권한이 있어야 합니다.
보호된 변수 및 러너에 대한 접근을 제어하려면:
- 상단 바에서 Search or go to를 선택하고 프로젝트를 찾습니다.
- Settings > CI/CD를 선택합니다.
- Variables를 확장합니다.
- 머지 리퀘스트 파이프라인에서 보호된 리소스에 접근 아래에서 Allow merge request pipelines to access protected variables and runners 체크박스를 선택하거나 해제합니다.
