머지 리퀘스트 파이프라인

머지 리퀘스트 파이프라인 (Merge request pipelines)

머지 리퀘스트에서 소스 브랜치를 변경할 때마다 파이프라인이 실행되도록 구성할 수 있어요. 이런 파이프라인을 머지 리퀘스트 파이프라인이라고 해요.

이 파이프라인은 다음 때 실행돼요:

  • 커밋이 하나 이상 있는 소스 브랜치에서 새 머지 리퀘스트를 만들 때.
  • 머지 리퀘스트의 소스 브랜치에 새 커밋을 푸시할 때.
  • 머지 리퀘스트의 Pipelines 탭으로 가서 Run pipeline을 선택할 때.

머지 리퀘스트 파이프라인은:

  • 소스 브랜치의 내용에서만 실행되고 대상 브랜치의 내용은 무시해요.
  • 파이프라인 목록에 merge request 라벨을 표시해요.

소스 브랜치와 대상 브랜치를 병합한 결과를 테스트하는 파이프라인을 실행하려면 병합 결과 파이프라인을 사용하세요.

출처: 문서

본문

전제 조건

머지 리퀘스트 파이프라인을 사용하려면:

  • 프로젝트의 .gitlab-ci.yml 파일에 CI_PIPELINE_SOURCE == "merge_request_event"와 일치하는 잡 규칙이나 워크플로우 규칙이 있어야 해요.
  • 머지 리퀘스트 파이프라인을 실행하려면 소스 프로젝트에 Developer, Maintainer 또는 Owner 역할이 있어야 해요.
  • 저장소가 GitLab 저장소여야 하며 외부 저장소가 아니어야 해요.

머지 리퀘스트 파이프라인 구성하기

머지 리퀘스트 파이프라인을 구성하려면 .gitlab-ci.yml 파일에서 CI_PIPELINE_SOURCEmerge_request_event일 때 실행되도록 잡을 구성해야 해요.

include:에 정의된 규칙(예: include:component)은 이 요구사항을 충족하지 못해요. .gitlab-ci.yml에 직접 일치하는 rules: 또는 workflow: rules를 정의해야 해요.

rules로 개별 잡을 구성하거나 workflow: rules로 전체 파이프라인을 제어할 수 있어요.

개별 잡 구성하기

rules 키워드로 머지 리퀘스트 파이프라인에서 실행할 개별 잡을 구성하세요. 예를 들면:

job1:
  script:
    - echo "This job runs in merge request pipelines"
  rules:
    - if: $CI_PIPELINE_SOURCE == "merge_request_event"

파일 변경에 따라 잡 실행 시점을 제어할 수도 있어요:

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 키워드로 파이프라인의 모든 잡이 머지 리퀘스트 파이프라인에서 실행되도록 구성할 수 있어요. 예를 들면:

workflow:
  rules:
    - if: $CI_PIPELINE_SOURCE == "merge_request_event"

job1:
  script:
    - echo "This job runs in merge request pipelines"

더 많은 workflow 예시는 다음을 참고하세요:

머지 리퀘스트 파이프라인에서 보안 스캐닝 도구를 사용하려면, AST_ENABLE_MR_PIPELINES CI/CD 변수나 latest 템플릿 에디션을 사용하세요.

사용자 정의 입력으로 머지 리퀘스트 파이프라인 실행하기

  • GitLab 18.11에서 도입됐어요.

.gitlab-ci.yml파이프라인 입력을 정의한다면, 새 머지 리퀘스트 파이프라인을 수동으로 실행할 때 입력 값을 맞춤 설정할 수 있어요. 같은 양식에서 CI/CD 변수도 설정할 수 있어요.

전제 조건:

사용자 정의 입력으로 머지 리퀘스트 파이프라인을 실행하려면:

  1. 왼쪽 사이드바에서 Search or go to를 선택하고 프로젝트를 찾으세요.
  2. Code > Merge requests를 선택하고 머지 리퀘스트를 여세요.
  3. Pipelines 탭을 선택하세요.
  4. Run pipeline 드롭다운 목록 ( chevron-down )을 선택하고 Run pipeline with modified values를 고르세요.
  5. 새 파이프라인 양식이 열리고 머지 리퀘스트의 소스 브랜치가 미리 채워져 있어요. 입력 값을 수정하고 필요에 따라 CI/CD 변수를 설정하세요.
  6. Run pipeline을 선택하세요.

포크된 프로젝트에서 사용하기

포크에서 작업하는 외부 기여자는 상위 프로젝트에서 파이프라인을 만들 수 없어요.

상위 프로젝트에 제출된 포크의 머지 리퀘스트는 다음 파이프라인을 트리거해요:

  • 포크(소스) 프로젝트가 아닌, 상위(대상) 프로젝트에서 생성되고 실행돼요.
  • 포크 프로젝트의 CI/CD 구성, 리소스, 프로젝트 CI/CD 변수를 사용해요.

포크의 파이프라인은 상위 프로젝트에서 fork 배지와 함께 표시돼요.

상위 프로젝트에서 파이프라인 실행하기

상위 프로젝트의 멤버는 포크 프로젝트에서 제출된 머지 리퀘스트에 대해 머지 리퀘스트 파이프라인을 트리거할 수 있어요. 이 파이프라인은:

  • 포크(소스) 프로젝트가 아닌, 상위(대상) 프로젝트에서 생성되고 실행돼요.
  • 포크 프로젝트의 브랜치에 있는 CI/CD 구성을 사용해요.
  • 상위 프로젝트의 CI/CD 설정, 리소스, 프로젝트 CI/CD 변수를 사용해요.
  • 파이프라인을 트리거하는 상위 프로젝트 멤버의 권한을 사용해요.

포크 프로젝트 MR에서 파이프라인을 실행하면 병합 후 파이프라인이 상위 프로젝트에서 통과하는지 확인할 수 있어요. 게다가 포크 프로젝트의 러너를 신뢰하지 않는다면, 상위 프로젝트에서 파이프라인을 실행하면 상위 프로젝트의 신뢰할 수 있는 러너를 사용해요.

포크 머지 리퀘스트에는 병합 전이라도 파이프라인이 실행될 때 상위 프로젝트의 시크릿을 훔치려는 악성 코드가 포함될 수 있어요. 리뷰어로서 파이프라인을 트리거하기 전에 머지 리퀘스트의 변경 사항을 주의 깊게 확인하세요. API나 /rebase 빠른 동작으로 파이프라인을 트리거하지 않는 한, GitLab은 파이프라인이 실행되기 전에 수락해야 하는 경고를 표시해요. 그 외에는 경고가 표시되지 않아요.

전제 조건:

UI를 사용해 포크 프로젝트에서 온 머지 리퀘스트에 대해 상위 프로젝트에서 파이프라인을 실행하려면:

  1. 머지 리퀘스트에서 Pipelines 탭으로 가세요.
  2. Run pipeline을 선택하세요. 경고를 읽고 수락해야 파이프라인이 실행돼요.

포크 프로젝트의 파이프라인 방지하기

사용자가 상위 프로젝트에서 포크 프로젝트용 새 파이프라인을 실행하지 못하게 하려면 프로젝트 APIci_allow_fork_pipelines_to_run_in_parent_project 설정을 비활성화하세요.

설정을 비활성화하기 전에 생성된 파이프라인은 영향을 받지 않고 계속 실행돼요. 이전 파이프라인에서 잡을 다시 실행하면 해당 잡은 파이프라인이 원래 생성됐을 때와 같은 컨텍스트를 사용해요.

사용 가능한 사전 정의 변수

머지 리퀘스트 파이프라인을 사용할 때 다음을 사용할 수 있어요:

보호된 변수와 러너에 대한 액세스 제어하기

  • GitLab 18.1에서 도입됐어요.

머지 리퀘스트 파이프라인에서 보호된 CI/CD 변수보호된 러너에 대한 액세스를 제어할 수 있어요.

머지 리퀘스트 파이프라인이 이런 보호된 리소스에 액세스할 수 있는 경우는:

  • 소스 브랜치와 대상 브랜치가 모두 보호된 경우.
  • 파이프라인을 트리거하는 사용자가 대상 브랜치에 push/merge 액세스 권한이 있는 경우.
  • 소스 브랜치와 대상 브랜치가 같은 프로젝트에 속한 경우.

포크된 저장소에서 온 머지 리퀘스트 파이프라인은 이런 보호된 리소스에 액세스할 수 없어요.

전제 조건:

  • 프로젝트에서 Maintainer 또는 Owner 역할이 있어야 해요.

보호된 변수와 러너에 대한 액세스를 제어하려면:

  1. 상단 바에서 Search or go to를 선택하고 프로젝트를 찾으세요.
  2. 왼쪽 사이드바에서 Settings > CI/CD를 선택하세요.
  3. Variables를 확장하세요.
  4. Access protected resources in merge request pipelines 아래에서 Allow merge request pipelines to access protected variables and runners 체크박스를 선택하거나 해제하세요.

관련 주제

더 알아보기

다음으로는 병합 결과 파이프라인 문서를 읽으면 소스·대상 브랜치 병합 결과까지 테스트하는 더 엄격한 방식을 익힐 수 있어요. workflow 규칙도 함께 보면 파이프라인 트리거 조건을 세밀하게 제어할 수 있어요.