병합 요청 파이프라인

Tier: Free, Premium, Ultimate Offering: GitLab.com, Self-managed, GitLab Dedicated

병합 요청에서 소스 브랜치에 변경 사항을 적용할 때마다 파이프라인을 실행하도록 구성할 수 있습니다.

이러한 유형의 파이프라인을 병합 요청 파이프라인이라고 하며, 다음과 같은 경우에 실행됩니다:

  • 하나 이상의 커밋이 있는 소스 브랜치에서 새로운 병합 요청을 생성할 때.
  • 병합 요청을 위한 소스 브랜치에 새로운 커밋을 푸시할 때.
  • 병합 요청의 파이프라인 탭으로 이동하여 파이프라인 실행을 선택할 때.

또한, 병합 요청 파이프라인은 다음과 같은 특성을 가집니다:

이러한 파이프라인은 파이프라인 목록에서 merge request 레이블을 표시합니다.

병합 요청 파이프라인은 소스 브랜치의 내용만 실행되며, 대상 브랜치의 내용은 무시됩니다. 소스 브랜치와 대상 브랜치를 함께 병합한 결과를 테스트하려면 병합 결과 파이프라인을 사용하세요.

필수 조건

병합 요청 파이프라인을 사용하려면:

병합 요청 파이프라인에 작업 추가

rules 키워드를 사용하여 병합 요청 파이프라인에서 실행될 작업을 구성합니다. 예:

job1:
  script:
    - echo "이 작업은 병합 요청 파이프라인에서 실행됩니다"
  rules:
    - if: $CI_PIPELINE_SOURCE == 'merge_request_event'

또한 workflow: rules 키워드를 사용하여 전체 파이프라인이 병합 요청 파이프라인에서 실행되도록 구성할 수 있습니다. 예:

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

job1:
  script:
    - echo "이 작업은 병합 요청 파이프라인에서 실행됩니다"

job2:
  script:
    - echo "이 작업도 병합 요청 파이프라인에서 실행됩니다"

일반적인 workflow 구성은 병합 요청, 태그 및 기본 브랜치에서 파이프라인이 실행되도록 하는 것입니다. 예:

workflow:
  rules:
    - if: $CI_PIPELINE_SOURCE == 'merge_request_event'
    - if: $CI_COMMIT_TAG
    - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH

포크된 프로젝트와 함께 사용

포크에서 작업하는 외부 기여자는 부모 프로젝트에서 파이프라인을 생성할 수 없습니다.

부모 프로젝트에 제출된 포크의 병합 요청은 다음과 같은 파이프라인을 트리거합니다:

  • 포크(소스) 프로젝트에서 생성되어 실행되며, 부모(대상) 프로젝트가 아닙니다.
  • 포크 프로젝트의 CI/CD 구성, 리소스 및 프로젝트 CI/CD 변수를 사용합니다.

포크에 대한 파이프라인은 부모 프로젝트에서 fork 배지와 함께 표시됩니다.

부모 프로젝트에서 파이프라인 실행

부모 프로젝트의 프로젝트 구성원은 포크 프로젝트에서 제출된 병합 요청에 대해 병합 요청 파이프라인을 트리거할 수 있습니다. 이 파이프라인:

  • 부모(대상) 프로젝트에서 생성되어 실행되며, 포크(소스) 프로젝트가 아닙니다.
  • 포크 프로젝트의 브랜치에 있는 CI/CD 구성을 사용합니다.
  • 부모 프로젝트의 CI/CD 설정, 리소스 및 프로젝트 CI/CD 변수를 사용합니다.
  • 파이프라인을 트리거한 부모 프로젝트 구성원의 권한을 사용합니다.

포크 프로젝트 MR에서 파이프라인을 실행하여 부모 프로젝트에서 병합 후 파이프라인이 통과하는지 확인합니다. 또한, 포크 프로젝트의 러너를 신뢰하지 않는 경우, 부모 프로젝트에서 파이프라인을 실행하면 부모 프로젝트의 신뢰할 수 있는 러너를 사용하게 됩니다.

경고:
포크 병합 요청에는 파이프라인 실행 중 부모 프로젝트의 비밀을 훔치려는 악의적인 코드가 포함될 수 있습니다. 병합 이전에도 그렇습니다. 리뷰어로서, 파이프라인을 트리거하기 전에 병합 요청의 변경 사항을 신중하게 확인해야 합니다. API를 통해 파이프라인을 트리거하지 않거나 /rebase 빠른 작업을 통해 트리거하지 않는 한, GitLab은 파이프라인 실행 전에 수락해야 하는 경고를 표시합니다. 그렇지 않으면 경고가 표시되지 않습니다.

필수 조건:

포크 프로젝트에서 병합 요청에 대해 부모 프로젝트에서 파이프라인을 실행하려면 UI를 사용하세요:

  1. 병합 요청에서 파이프라인 탭으로 이동합니다.
  2. 파이프라인 실행을 선택합니다. 경고를 읽고 수락해야 하며, 그렇지 않으면 파이프라인이 실행되지 않습니다.

포크 프로젝트에서 파이프라인 방지

부모 프로젝트에서 포크 프로젝트에 대한 새로운 파이프라인 실행을 사용자가 방지하려면 프로젝트 API를 사용하여 ci_allow_fork_pipelines_to_run_in_parent_project 설정을 비활성화하세요.

경고: 설정이 비활성화되기 전에 생성된 파이프라인은 영향을 받지 않으며 계속 실행됩니다.

오래된 파이프라인에서 작업을 다시 실행하면, 해당 작업은 원래 파이프라인이 생성될 때와 동일한 컨텍스트를 사용합니다.

사용 가능한 미리 정의된 변수

병합 요청 파이프라인을 사용할 때, 다음을 사용할 수 있습니다: