병합 요청 파이프라인

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

병합 요청 시 소스 브랜치에 변경사항이 있을 때마다 파이프라인을 구성할 수 있습니다.

이 유형의 파이프라인인 병합 요청 파이프라인은 다음 상황에서 실행됩니다.

  • 하나 이상의 커밋이있는 소스 브랜치에서 새로운 병합 요청을 만드는 경우
  • 병합 요청용 소스 브랜치에 새 커밋을 푸시하는 경우
  • 병합 요청의 파이프라인 탭으로 이동하여 파이프라인 실행을 선택하는 경우

또한, 병합 요청 파이프라인은 다음을 수행합니다.

이러한 파이프라인은 파이프라인 목록에 병합 요청 라벨이 표시됩니다.

병합 요청 파이프라인은 소스 브랜치의 내용만을 실행하며 대상 브랜치의 내용은 무시합니다. 소스 및 대상 브랜치를 병합한 결과를 테스트하는 파이프라인을 실행하려면 병합된 결과 파이프라인을 사용하십시오.

준비 사항

병합 요청 파이프라인 사용을 위해 다음이 필요합니다.

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

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은 파이프라인이 실행되기 전에 승인해야한다는 경고를 표시합니다. 그렇지 않으면 경고가 표시되지 않습니다.

준비 사항:

  • 부모 프로젝트의 .gitlab-ci.yml 파일을 구성하여 병합 요청 파이프라인에서 작업을 실행합니다.
  • CI/CD 파이프라인을 실행할 권한이 있는 부모 프로젝트의 멤버여야합니다. 브랜치가 보호되어 있는 경우 추가 권한이 필요할 수 있습니다.
  • 사용자가 파이프라인을 실행하는 포크 프로젝트는 사용자에게 표시되어야합니다. 그렇지 않으면 병합 요청에서 파이프라인 탭이 표시되지 않습니다.

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

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

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

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

경고: 설정을 비활성화하기 전에 생성된 파이프라인은 영향을받지 않으며 계속 실행됩니다. 이전 파이프라인에서 작업을 다시 실행하는 경우 해당 작업은 원래 파이프라인이 생성된 시점의 컨텍스트를 사용합니다.

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

병합 요청 파이프라인에서 다음을 사용할 수 있습니다.