외부 저장소를 위한 GitLab CI/CD

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

GitHub, Bitbucket Cloud 또는 다른 Git 서버와 함께 사용할 수 있지만, 제한 사항이 있습니다.

프로젝트 전체를 GitLab으로 옮기는 대신, 외부 저장소를 연결하여 GitLab CI/CD의 이점을 누릴 수 있습니다.

외부 저장소를 연결하면 저장소 미러링이 설정되고, 이슈, 병합 요청, 위키, 스니펫이 비활성화된 가벼운 프로젝트가 생성됩니다. 나중에 이러한 기능을 다시 활성화할 수 있습니다.

외부 저장소에 연결

외부 저장소에 연결하려면:

  1. 왼쪽 사이드바에서 위쪽에 있는 새로 만들기 ()를 선택한 후 새 프로젝트/저장소를 선택합니다.
  2. 외부 저장소용 CI/CD 실행을 선택합니다.
  3. GitHub 또는 URL별 저장소를 선택합니다.
  4. 필드를 작성합니다.

외부 저장소용 CI/CD 실행 옵션이 사용할 수 없는 경우, GitLab 인스턴스에 가져오기 소스가 구성되어 있지 않을 수 있습니다. 인스턴스의 관리자에게 가능한 가져오기 소스 설정을 확인하도록 요청하세요.

외부 풀 요청을 위한 파이프라인

GitHub의 외부 저장소에서 GitLab CI/CD를 사용하면 풀 요청의 문맥에서 파이프라인을 실행할 수 있습니다.

GitHub의 원격 브랜치에 변경 사항을 푸시하면, GitLab CI/CD가 해당 브랜치에 대한 파이프라인을 실행할 수 있습니다. 그러나 해당 브랜치에 대한 풀 요청을 열거나 업데이트하는 경우,

  • 추가 작업을 실행하거나
  • 특정 작업을 실행하지 않고 싶을 수 있습니다.

예를 들어:

always-run:
  script: echo '항상 실행되어야 함'

on-pull-requests:
  script: echo '풀 요청에서 실행되어야 함'
  only:
    - external_pull_requests

except-pull-requests:
  script: echo '풀 요청에서 실행되어서는 안 됨'
  except:
    - external_pull_requests

작동 방식

GitHub에서 저장소가 가져오면, GitLab은 pushpull_request 이벤트에 대한 웹훅을 구독합니다. pull_request 이벤트가 받아지면 해당 풀 요청 데이터가 저장되어 참조로 유지됩니다. 풀 요청이 방금 생성된 경우, GitLab은 외부 풀 요청을 위해 즉시 파이프라인을 생성합니다.

참조된 브랜치로 변경 사항이 푸시되고 풀 요청이 여전히 열려 있는 경우, 외부 풀 요청을 위해 파이프라인이 생성됩니다.

이 경우 GitLab CI/CD는 2개의 파이프라인을 생성합니다. 하나는 브랜치 푸시용이고 다른 하나는 외부 풀 요청용입니다.

풀 요청이 닫힌 후라면, 새로운 변경 사항이 동일한 브랜치에 푸시되더라도 외부 풀 요청을 위해 파이프라인이 생성되지 않습니다.

추가 사전 정의된 변수

외부 풀 요청에 대한 파이프라인을 사용함으로써, GitLab은 파이프라인 작업에 추가적인 사전 정의된 변수를 노출합니다.

이 변수 이름은 CI_EXTERNAL_PULL_REQUEST_로 접두사가 붙습니다.

제한 사항

이 기능은 다음을 지원하지 않습니다:

GitLab이 2개의 파이프라인을 생성하기 때문에 원격 브랜치에 변경 사항을 푸시하면 GitHub 통합을 통해 풀 요청의 상태에 영향을 줍니다. 외부 풀 요청에 대해 배타적으로 파이프라인을 실행하고 브랜치에서는 실행하지 않으려면 작업 사양에 except: [branches]를 추가할 수 있습니다. 더 알아보기.

문제 해결