GitLab CI/CD 외부 리포지토리용

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

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

전체 프로젝트를 GitLab으로 이동하는 대신, GitLab CI/CD의 이점을 얻기 위해 외부 리포지토리를 연결할 수 있습니다.

외부 리포지토리를 연결하면 리포지토리 미러링이 설정되고, 이슈, 병합 요청, 위키 및 스니펫이 비활성화된 경량 프로젝트가 생성됩니다. 이러한 기능은 나중에 다시 활성화할 수 있습니다.

외부 리포지토리 연결

외부 리포지토리를 연결하려면:

  1. 왼쪽 사이드바에서 맨 위에 있는 새로 만들기 ( ) 및 새 프로젝트/리포지토리를 선택합니다.
  2. 외부 리포지토리의 CI/CD 실행을 선택합니다.
  3. GitHub 또는 URL로 리포지토리를 선택합니다.
  4. 필드를 작성합니다.

외부 리포지토리의 CI/CD 실행 옵션이 표시되지 않는 경우, GitLab 인스턴스에 가져올 소스가 구성되지 않았을 수 있습니다. 인스턴스의 관리者에게 가져오기 소스 구성을 확인하도록 요청하세요.

외부 풀 리퀘스트를 위한 파이프라인

GitLab CI/CD를 GitHub의 외부 리포지토리와 함께 사용할 때, Pull Request의 맥락에서 파이프라인을 실행할 수 있습니다.

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

  • 추가 작업 실행
  • 특정 작업 실행 안 함

예를 들어:

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 이벤트가 수신되면, Pull Request 데이터가 저장되고 참조로 유지됩니다. Pull Request가 방금 생성된 경우, GitLab은 외부 Pull Request를 위해 즉시 파이프라인을 생성합니다.

Pull Request가 참조하는 브랜치에 변경 사항이 푸시되고 Pull Request가 아직 열려 있는 경우, 외부 Pull Request를 위한 파이프라인이 생성됩니다.

이 경우 GitLab CI/CD는 2개의 파이프라인을 생성합니다. 하나는 브랜치 푸시에 대한 것이고, 다른 하나는 외부 Pull Request에 대한 것입니다.

Pull Request가 닫히면, 같은 브랜치에 새 변경 사항이 푸시되더라도 외부 Pull Request에 대한 파이프라인이 생성되지 않습니다.

추가 미리 정의된 변수

외부 Pull Request에 대한 파이프라인을 사용할 때, GitLab은 파이프라인 작업에 추가 미리 정의된 변수를 노출합니다.

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

제한 사항

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

GitLab이 2개의 파이프라인을 생성하므로, 열려 있는 Pull Request를 참조하는 원격 브랜치에 변경 사항이 푸시되면, 두 개 모두 GitHub 통합을 통해 Pull Request의 상태에 기여합니다. 외부 Pull Request에서만 파이프라인을 실행하고 브랜치에서는 실행하지 않으려면, 작업 사양에 except: [branches]를 추가할 수 있습니다. 자세히 알아보기.

문제 해결