외부 리포지터리용 GitLab CI/CD
GitLab 10.6에서 소개되었습니다.
GitLab CI/CD는 GitHub, Bitbucket Cloud 또는 다른 Git 서버와 함께 사용할 수 있지만, 제한 사항이 있습니다.
프로젝트 전체를 GitLab으로 이동하는 대신, 외부 리포지터리를 연결하여 GitLab CI/CD의 이점을 누릴 수 있습니다.
외부 리포지터리를 연결하면 리포지터리 미러링이 설정되고, 이슈, Merge Request, 위키, 그리고 스니펫이 비활성화된 가벼운 프로젝트가 생성됩니다. 이러한 기능은 나중에 다시 활성화할 수 있습니다.
외부 리포지터리에 연결
외부 리포지터리에 연결하려면:
- 왼쪽 사이드바에서 상단에 있는 새로 만들기 () 및 새 프로젝트/리포지터리를 선택합니다.
- 외부 리포지터리용 CI/CD 실행을 선택합니다.
- GitHub 또는 URL별 리포지터리를 선택합니다.
- 필드를 작성합니다.
만약 외부 리포지터리용 CI/CD 실행 옵션이 사용할 수 없다면, GitLab 인스턴스에 가져오기 소스가 구성되지 않았을 수 있습니다. 인스턴스의 관리자에게 가능한 가져오기 소스 구성을 확인하도록 요청하세요.
외부 풀 요청용 파이프라인
- GitLab 12.3에서 소개되었습니다.
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은 push
및 pull_request
이벤트에 대한 웹훅을 구독합니다. 풀 요청 이벤트가 수신되면, 풀 요청 데이터가 저장되고 참조로 유지됩니다. 풀 요청이 방금 작성된 경우, GitLab은 외부 풀 요청용으로 즉시 파이프라인을 생성합니다.
참조된 브랜치에 변경 사항이 푸시되고 풀 요청이 여전히 열려 있다면, 외부 풀 요청용으로 파이프라인이 생성됩니다.
이 경우 GitLab CI/CD는 2개의 파이프라인을 생성합니다. 하나는 브랜치 푸시용이고, 다른 하나는 외부 풀 요청용입니다.
풀 요청이 닫힌 후, 동일한 브랜치로 새로운 변경 사항이 푸시되더라도 외부 풀 요청용으로 파이프라인이 생성되지 않습니다.
추가 사전 정의된 변수
외부 풀 요청용 파이프라인을 사용함으로써 GitLab은 파이프라인 작업에 대한 추가 사전 정의된 변수를 노출합니다.
변수 이름은 CI_EXTERNAL_PULL_REQUEST_
로 접두어가 붙습니다.
제한 사항
이 기능은 다음을 지원하지 않습니다:
- GitHub Enterprise에서 필요한 매뉴얼 연결 방법. 통합이 매뉴얼으로 연결되었을 경우, 외부 풀 요청은 파이프라인을 트리거하지 않습니다.
- 포크 리포지터리에서의 풀 요청. 포크 리포지터리에서의 풀 요청은 무시됩니다.
GitLab은 2개의 파이프라인을 생성하므로, 기존 열린 풀 요청을 참조하는 원격 브랜치에 변경 사항이 푸시되면 두 가지가 GitHub 통합을 통해 풀 요청의 상태에 기여합니다. 외부 풀 요청에서만 파이프라인을 실행하고 브랜치에서는 실행하지 않으려면 작업 사양에 except: [branches]
를 추가할 수 있습니다. 더 많이 알아보기.