머지 리퀘스트 파이프라인
GitLab v19.5Offering: GitLab.com, GitLab Self-Managed, GitLab Dedicated
요약
머지 리퀘스트의 소스 브랜치를 변경할 때마다 파이프라인이 실행되도록 구성할 수 있습니다. 다음과 같은 경우 이 파이프라인이 실행됩니다. 머지 리퀘스트 파이프라인은 다음과 같은 특징이 있습니다. 소스 브랜치와 대상 브랜치를 병합한 결과를 테스트하는 파이프라인을 실행하려면 병합 결과 파이프라인을 사용합니다.
머지 리퀘스트의 소스 브랜치를 변경할 때마다 파이프라인이 실행되도록 구성할 수 있습니다. 이러한 유형의 파이프라인을 머지 리퀘스트 파이프라인이라고 합니다.
다음과 같은 경우 이 파이프라인이 실행됩니다.
- 커밋이 하나 이상 있는 소스 브랜치에서 새 머지 리퀘스트를 생성하는 경우
- 머지 리퀘스트의 소스 브랜치에 새 커밋을 푸시하는 경우
- 머지 리퀘스트의 Pipelines 탭으로 이동해 Run pipeline을 선택하는 경우
머지 리퀘스트 파이프라인은 다음과 같은 특징이 있습니다.
- 대상 브랜치의 내용은 무시하고 소스 브랜치의 내용에서만 실행됩니다.
- 파이프라인 목록에
merge request레이블을 표시합니다.
소스 브랜치와 대상 브랜치를 병합한 결과를 테스트하는 파이프라인을 실행하려면 병합 결과 파이프라인을 사용합니다.
사전 요구 사항#
머지 리퀘스트 파이프라인을 사용하려면 다음이 필요합니다.
- 프로젝트의
.gitlab-ci.yml파일에CI_PIPELINE_SOURCE == "merge_request_event"와 일치하는 job 규칙 또는 workflow 규칙이 포함되어 있어야 합니다. - 머지 리퀘스트 파이프라인을 실행하려면 소스 프로젝트에 대해 Developer, Maintainer, Owner 권한이 있어야 합니다.
- 리포지터리가 외부 리포지터리가 아닌 GitLab 리포지터리여야 합니다.
머지 리퀘스트 파이프라인 구성#
머지 리퀘스트 파이프라인을 구성하려면 CI_PIPELINE_SOURCE가 merge_request_event와
같을 때 실행되도록 .gitlab-ci.yml 파일에서 job을 구성해야 합니다.
include:(예: include:component)에 정의된 규칙은 이 요구 사항을 충족하지 않습니다.
.gitlab-ci.yml에 일치하는 rules: 또는 workflow: rules를 직접 정의해야 합니다.
개별 job은 rules로 구성할 수 있고, 파이프라인 전체를 제어하려면 workflow: rules를
사용할 수 있습니다.
개별 job 구성#
머지 리퀘스트 파이프라인에서 실행되도록 개별 job을 구성하려면
rules 키워드를 사용합니다. 예를 들면 다음과 같습니다.
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"
전체 파이프라인 구성#
파이프라인의 모든 job이 머지 리퀘스트 파이프라인에서 실행되도록 구성하려면
workflow: rules 키워드를 사용합니다. 예를 들면 다음과 같습니다.
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에서만 사용 가능한 추가 사전 정의 변수
보호된 변수 및 러너 접근 제어#
히스토리
- GitLab 18.1에서 도입되었습니다.
머지 리퀘스트 파이프라인에서 보호된 CI/CD 변수 및 보호된 러너에 대한 접근을 제어할 수 있습니다.
머지 리퀘스트 파이프라인은 다음 조건을 모두 충족할 때만 이러한 보호된 리소스에 접근할 수 있습니다.
- 소스 브랜치와 대상 브랜치가 모두 보호되어 있습니다.
- 파이프라인을 트리거하는 사용자가 대상 브랜치에 대한 푸시/머지 접근 권한을 가지고 있습니다.
- 소스 브랜치와 대상 브랜치가 모두 동일한 프로젝트에 속해 있습니다.
포크된 리포지터리에서 실행되는 머지 리퀘스트 파이프라인은 이러한 보호된 리소스에 접근할 수 없습니다.
사전 요구 사항:
- 프로젝트에 대해 Maintainer 또는 Owner 권한이 있어야 합니다.
보호된 변수 및 러너에 대한 접근을 제어하려면 다음과 같이 진행합니다.
- 상단 바에서 Search or go to를 선택하고 프로젝트를 찾습니다.
- 왼쪽 사이드바에서 Settings > CI/CD를 선택합니다.
- Variables를 확장합니다.
- Access protected resources in merge request pipelines에서 Allow merge request pipelines to access protected variables and runners 체크박스를 선택하거나 해제합니다.