병합 요청 파이프라인

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

Renamed from pipelines for merge requests to merge request pipelines in GitLab 14.8.

병합 요청에서 소스 브랜치의 변경 내용을 대상 브랜치로 통합하는 제안인 병합 요청(MR) 파이프라인을 구성할 수 있습니다.

이 유형의 파이프라인, 즉 병합 요청 파이프라인은 다음 경우에 실행됩니다:

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

또한, 병합 요청 파이프라인은:

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

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

전제 조건

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

  • 당신의 프로젝트의 .gitlab-ci.yml 파일은 병합 요청 파이프라인에서 실행되는 작업으로 구성되어 있어야 합니다. 이를 위해 다음을 사용할 수 있습니다:
  • 병합 요청 파이프라인을 실행하려면 소스 프로젝트에서 적어도 개발자 역할이 있어야 합니다.
  • 당신의 저장소는 GitLab 저장소여야 하며 외부 저장소가 아니어야 합니다.

작업 추가를 위한 rules 사용

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 구성은 병합 요청, 태그 및 기본 브랜치에 대해 파이프라인을 실행하는 것입니다. 예: yaml workflow: rules: - if: $CI_PIPELINE_SOURCE == 'merge_request_event' - if: $CI_COMMIT_TAG - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH

only를 사용하여 작업 추가

rules이 우선하는 방법이지만 only 키워드를 merge_requests와 함께 사용하여 작업을 병합 요청 파이프라인에서 실행되도록 구성할 수 있습니다. 예:

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

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

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

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

  • 이 파이프라인은 상위(타겟) 프로젝트가 아닌 포크(소스) 프로젝트에서 생성 및 실행됩니다.
  • 포크 프로젝트의 CI/CD 구성, 리소스 및 프로젝트 CI/CD 변수를 사용합니다.

포크용 파이프라인은 상위 프로젝트에서 fork 배지와 함께 표시됩니다:

Fork에서 실행된 파이프라인

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

상위 프로젝트의 프로젝트 멤버는 상위 프로젝트의 병합 요청에서 병합 요청 파이프라인을 트리거할 수 있습니다. 이 파이프라인은 다음과 같습니다:

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

상위 프로젝트의 포크 프로젝트 MR에서 파이프라인이 부모 프로젝트에서 통과되도록 하기 위해 포크 프로젝트 MR에서 파이프라인을 실행하십시오. 또한, 포크 프로젝트의 러너를 신뢰하지 않는 경우 부모 프로젝트에서 파이프라인을 실행하면 부모 프로젝트의 신뢰할 수있는 러너를 사용합니다.

경고: 포크된 병합 요청에는 병합 전에 부모 프로젝트에서 시크릿을 도둑질하려는 악성 코드가 포함될 수 있습니다. 리뷰어로서 파이프라인을 트리거하기 전에 병합 요청의 변경 사항을 주의 깊게 확인하십시오. API 또는 /rebase 퀵 액션을 통해 파이프라인을 트리거하지 않는 한, GitLab은 파이프라인이 실행되기 전에 수락해야 한다는 경고를 표시합니다. 그렇지 않으면 어떤 경고도 나타나지 않습니다.

전제 조건:

부모 프로젝트에서 포크 프로젝트 MR의 파이프라인을 실행하려면 UI를 사용하십시오:

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

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

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

경고: 설정이 비활성화되기 전에 생성된 파이프라인은 영향을받지 않으며 계속 실행됩니다. 이전 파이프라인에서 작업을 다시 실행하면 작업은 원래 파이프라인이 생성됐을 때와 동일한 컨텍스트를 사용합니다.

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

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