Merge Request 파이프라인

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

소스 브랜치에서 변경 사항을 가할 때마다 파이프라인을 구성할 수 있습니다. Merge Request에서 소스 브랜치로 실행되는 Merge Request 파이프라인은 다음과 같은 경우에 실행됩니다.

  • 하나 이상의 커밋이 있는 소스 브랜치에서 새로운 Merge Request을 생성합니다.
  • 커밋을 소스 브랜치로 푸시하여 Merge Request을합니다.
  • Merge Request의 파이프라인 탭으로 이동하여 파이프라인 실행을 선택합니다.

또한, Merge Request 파이프라인은:

이러한 파이프라인은 파이프라인 디렉터리에서 Merge Request 레이블이 표시됩니다.

Merge Request 파이프라인은 소스 브랜치의 콘텐츠에서만 실행되며 대상 브랜치의 콘텐츠는 무시됩니다. 소스와 대상 브랜치를 Merge한 결과를 테스트하는 파이프라인을 실행하려면 Merge Result 파이프라인을 사용하십시오.

전제 조건

Merge Request 파이프라인을 사용하려면 다음이 필요합니다.

  • 프로젝트의 .gitlab-ci.yml 파일은 Merge Request 파이프라인에서 실행되는 작업으로 구성되어 있어야 합니다.
  • Merge Request 파이프라인을 실행하려면 소스 프로젝트에서 적어도 개발자 권한이 있어야 합니다.
  • 귀하의 리포지터리는 GitLab 리포지터리여야 하며 외부 리포지터리가 아니어야 합니다.

Merge Request 파이프라인에 작업 추가

rules 키워드를 사용하여 작업을 구성하여 Merge Request 파이프라인에서 실행하도록 할 수 있습니다. 예를 들어:

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

또한 전체 파이프라인을 Merge Request 파이프라인에서 실행하도록 workflow:rules 키워드를 사용할 수도 있습니다. 예를 들어:

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

job1:
  script:
    - echo "이 작업은 Merge Request 파이프라인에서 실행됩니다"

job2:
  script:
    - echo "이 작업도 Merge Request 파이프라인에서 실행됩니다"

Merge Request, 태그 및 기본 브랜치용 파이프라인을 실행하도록 보통의 workflow 구성은 다음과 같습니다. 예를 들어:

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

포크된 프로젝트와 사용

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

부모 프로젝트에 제출된 포크에서의 Merge Request은:

  • 부모(타겟) 프로젝트가 아닌 포크(소스) 프로젝트에서 생성되고 실행됩니다.
  • 포크 프로젝트의 CI/CD 구성, 리소스 및 프로젝트 CI/CD 변수를 사용합니다.

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

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

부모 프로젝트의 프로젝트 멤버는 포크 프로젝트에서 제출된 Merge Request에 대한 Merge Request 파이프라인을 트리거할 수 있습니다. 이 파이프라인은:

  • 부모(타겟) 프로젝트가 아닌 포크(소스) 프로젝트에서 생성되고 실행됩니다.
  • 포크 프로젝트의 브랜치에 있는 CI/CD 구성을 사용합니다.
  • 부모 프로젝트의 CI/CD 설정, 리소스 및 프로젝트 CI/CD 변수를 사용합니다.
  • 파이프라인을 트리거하는 부모 프로젝트 멤버의 권한을 사용합니다.

부모 프로젝트에서 파이프라인을 실행하여 포크 프로젝트 MR(Merge Request)에서의 Merge 후 파이프라인을 통과하는지 확인하십시오. 또한, 포크 프로젝트의 러너를 신뢰하지 않는다면 부모 프로젝트에서의 파이프라인 실행은 부모 프로젝트의 신뢰하는 러너를 사용합니다.

caution
포크 Merge Request에는 Merge 전에 파이프라인이 실행될 때 부모 프로젝트에서 비밀을 훔치려는 악성 코드가 포함될 수 있습니다. 리뷰어로서 파이프라인을 트리거하기 전에 Merge Request의 변경 사항을 주의 깊게 확인하십시오. API나 /rebase 빠른 동작을 통해 파이프라인을 트리거하지 않는 한, GitLab은 파이프라인 실행 전에 받아야 할 경고를 표시합니다. 그렇지 않으면 어떤 경고도 표시되지 않습니다.

전제 조건:

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

  1. Merge Request에서 파이프라인 탭으로 이동합니다.
  2. 파이프라인 실행을 선택합니다. 경고를 읽고 수락해야 파이프라인이 실행됩니다.

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

부모 프로젝트에서 포크 프로젝트에 대한 새 파이프라인이 실행되는 것을 방지하려면 프로젝트 API를 사용하여 ci_allow_fork_pipelines_to_run_in_parent_project 설정을 비활성화하십시오.

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

사용 가능한 사전 정의된 변수

Merge Request 파이프라인을 사용할 때 다음을 사용할 수 있습니다.