저장소 미러링
외부 소스에서 레포지토리를 미러링하거나 미러링할 수 있습니다. 어떤 레포지토리가 소스로 사용될지 선택할 수 있습니다. 브랜치, 태그, 커밋은 자동으로 동기화됩니다.
다양한 미러링 방법이 있습니다:
- 푸시: GitLab에서 다른 위치로 레포지토리를 미러링합니다.
- 풀: 다른 위치에서 레포지토리를 미러링합니다. 프리미엄 및 얼티밋 티어에서 사용할 수 있습니다.
- 양방향 미러링도 가능하지만 충돌을 일으킬 수 있습니다.
레포지토리를 미러링하는 경우:
- 프로젝트의 공식 버전이 GitLab으로 이동했을 때 이전 위치에서 프로젝트의 사본을 유지하려면 GitLab 레포지토리를 푸시 미러로 구성하세요. GitLab 레포지토리를 수정하면 이를 이전 위치로 복사합니다.
- GitLab 인스턴스가 비공개이지만 일부 프로젝트를 오픈 소스로 공개하려는 경우.
- GitLab로 마이그레이션했지만 프로젝트의 공식 버전이 다른 곳에 있는 경우. GitLab 레포지토리를 다른 프로젝트의 풀 미러로 구성하세요. GitLab 레포지토리가 프로젝트의 커밋, 태그, 브랜치의 사본을 가져와 GitLab에서 사용할 수 있게 됩니다.
지원되지 않는 항목은 다음과 같습니다:
- SCP 스타일 URL입니다. SCP 스타일 URL 구현 작업이 진행 중입니다. 자세한 정보와 진행 상황을 보려면 이슈 18993을 참조하세요.
- 덤 HTTP 프로토콜을 통해 레포지토리를 미러링하는 것은 지원되지 않습니다.
레포지토리 미러 생성
전제 조건:
- 프로젝트를 유지 관리자 역할 이상으로 갖고 있어야 합니다.
- 미러가
ssh://
로 연결되는 경우, 호스트 키는 서버에서 감지할 수 있거나 로컬에 키의 사본이 있어야 합니다.
- 왼쪽 사이드바에서 검색 또는 이동을 선택하고 프로젝트를 찾습니다.
- 설정 > 저장소를 선택합니다.
- 레포지토리 미러링을 확장합니다.
- 새로 추가를 선택합니다.
- Git 레포지토리 URL을 입력합니다. 보안상의 이유로 원본 레포지토리의 URL은 유지 관리자 역할 또는 미러링된 프로젝트의 소유자 역할을 가진 사용자에게만 표시됩니다.
- 미러 방향을 선택합니다.
-
ssh://
URL을 입력한 경우 다음 중 하나를 선택합니다:- 호스트 키 감지: GitLab이 서버에서 호스트 키를 가져와 지문을 표시합니다.
- 수동으로 호스트 키 입력, 그리고 SSH 호스트 키에 호스트 키를 입력합니다.
레포지토리를 미러링할 때, GitLab은 연결하기 전에 저장된 호스트 키 중 적어도 하나가 일치하는지 확인합니다. 이 확인은 악의적인 코드 주입으로부터 미러를 보호하거나 비밀번호 유출을 방지할 수 있습니다.
- 인증 방법을 선택합니다. 자세한 정보는 미러용 인증 방법을 참조하세요.
- SSH 호스트 키로 인증하는 경우, 올바른 호스트 키인지 확인하려면 호스트 키 확인을 수행하세요.
- 분기된 참조에 대한 강제 푸시를 방지하려면, 분기된 참조 유지를 선택합니다.
- 선택 사항. 미러링할 분기의 수를 제한하려면 보호된 분기만 미러링을 선택하거나 특정 분기 미러링에 정규표현식을 입력합니다.
- 레포지토리 미러링을 선택합니다.
SSH 공개 키
를 인증 방법으로 선택하면, GitLab은 GitLab 레포지토리에 대한 공개 키를 생성합니다.
이 공개 키를 GitLab이 아닌 서버에 제공해야 합니다. 자세한 정보는 SSH 공개 키 가져오기를 참조하세요.
보호된 분기만 미러링
미러링 프로젝트에서 보호된 분기만 미러링할 수 있으며, 풀 미러링의 경우 미러링 프로젝트의 보호되지 않은 분기는 미러링되지 않고 분리될 수 있습니다.
이 옵션을 사용하려면 레포지토리 미러를 생성할 때 보호된 분기만 미러링을 선택하세요.
특정 분기 미러링
- GitLab 15.8에서 API 옵션으로 정규 표현식에 일치하는 브랜치를 미러링하는 기능이 도입되었습니다. 기본으로 비활성화됨.
- GitLab 15.9에서 프로젝트 설정에서 옵션을 도입했습니다.
- GitLab 16.0에서 기본적으로 활성화되었습니다.
- GitLab 16.2에서 일반적으로 사용 가능합니다. 피처 플래그
mirror_only_branches_match_regex
가 제거되었습니다.
re2 정규 표현식과 일치하는 이름의 분기만 미러링하려면 특정 분기 미러링 필드에 정규 표현식을 입력하세요. 정규 표현식과 일치하지 않는 이름의 분기는 미러링되지 않습니다.
미러 업데이트
미러 레포지토리가 업데이트되면 새로운 브랜치, 태그, 커밋이 프로젝트의 활동 피드에서 확인할 수 있습니다. GitLab의 레포지토리 미러는 자동으로 업데이트됩니다. 수동으로 업데이트를 수행할 수도 있습니다.
- GitLab.com의 경우 최소 5분마다 한 번씩.
- Self-Managed 인스턴스에서는 관리자가 설정한 풀 미러링 간격 제한에 따라.
참고: GitLab Silent Mode를 사용하면 푸시와 풀 업데이트가 모두 비활성화됩니다.
강제 업데이트
미러는 자동으로 업데이트되도록 예약되어 있지만, 다음과 같은 경우 즉시 업데이트를 강제할 수 있습니다:
- 미러가 이미 업데이트되고 있는 경우.
- 풀 미러링 간격이 이전 업데이트 이후 경과하지 않은 경우.
전제 조건:
- 프로젝트에 대해 최소한 유지 관리자 역할이 있어야 합니다.
- 왼쪽 사이드바에서 검색 또는 이동을 선택하고 프로젝트를 찾습니다.
- 설정 > 저장소를 선택합니다.
- 레포지토리 미러링을 확장합니다.
- 미러링된 레포지토리로 스크롤하고 업데이트하려는 미러를 식별합니다.
- 지금 업데이트를 선택합니다 ():
미러의 인증 방법
미러를 생성할 때 인증 방법을 구성해야 합니다. GitLab은 다음과 같은 인증 방법을 지원합니다.
- SSH 인증.
- 사용자 이름과 비밀번호.
프로젝트 액세스 토큰 또는 그룹 액세스 토큰의 경우, 사용자 이름(토큰 이름이 아님)과 비밀번호로 사용합니다.
SSH 인증
SSH 인증은 상호적입니다.
- 서버에게 저장소에 액세스할 수 있는 권한이 있는지 증명해야 합니다.
- 서버는 또한 당신에게 자신이 주장하는 대로인지 증명해야 합니다.
SSH 인증에서는 비밀번호 또는 _공개 키_로 자격 증명을 제공해야 합니다. 다른 저장소에 있는 서버는 자격 증명으로 _호스트 키_를 제공합니다. 이 호스트 키의 지문을 검증해야 합니다.
SSH를 통해 미러를 생성하는 경우(ssh://
URL 사용), 다음과 같이 인증할 수 있습니다.
- HTTPS처럼 비밀번호 기반 인증.
- 공개 키 인증. 이 방법은 종종 배포 키를 지원하는 다른 저장소에서 특히 보안적으로 더 안전합니다.
SSH 공개 키 가져오기
저장소를 미러링하고 SSH 공개 키를 인증 방법으로 선택하는 경우, GitLab은 사용자를 위해 공개 키를 생성합니다. GitLab 저장소와 신뢰를 설정하기 위해 다른 GitLab 저장소가 필요합니다. SSH 공개 키를 복사하려면:
- 왼쪽 사이드바에서 검색 또는 이동을 선택하고 프로젝트를 찾습니다.
- 설정 > 저장소를 선택합니다.
- 미러링 저장소를 확장합니다.
- 미러링된 저장소로 스크롤합니다.
- 올바른 저장소를 식별하고 SSH 공개 키 복사를 선택합니다 ().
- 다른 저장소의 구성에 공개 SSH 키를 추가합니다.
- 다른 저장소가 GitLab에 호스팅되는 경우, 공개 SSH 키를 배포 키로 추가합니다.
- 다른 저장소가 다른 곳에 호스팅되는 경우, 키를
사용자의
authorized_keys
파일에 추가합니다. 전체 공개 SSH 키를 파일에 한 줄로 붙여넣은 다음 저장합니다.
언제든지 키를 변경해야 하는 경우, 미러를 제거하고 다시 추가하여 새 키를 생성할 수 있습니다. 새 키로 다른 저장소를 업데이트하여 미러를 유지합니다.
참고: 생성된 키는 파일 시스템이 아닌 GitLab 데이터베이스에 저장됩니다. 따라서, 미러의 SSH 공개 키 인증은 사전 수신 후크에서 사용할 수 없습니다.
호스트 키 검증
호스트 키를 사용할 때는 항상 기대한 지문과 일치하는지 확인해야 합니다. GitLab.com 및 다른 코드 호스팅 사이트는 확인할 수 있도록 그들의 지문을 게시합니다:
다른 제공 업체는 다양합니다. 자체 관리 GitLab을 실행하거나 다른 저장소에 대한 서버에 액세스할 수 있는 경우 다음 명령을 사용하여 키 지문을 안전하게 수집할 수 있습니다.
$ cat /etc/ssh/ssh_host*pub | ssh-keygen -E md5 -l -f -
256 MD5:f4:28:9f:23:99:15:21:1b:bf:ed:1f:8e:a0:76:b2:9d root@example.com (ECDSA)
256 MD5:e6:eb:45:8a:3c:59:35:5f:e9:5b:80:12:be:7e:22:73 root@example.com (ED25519)
2048 MD5:3f:72:be:3d:62:03:5c:62:83:e8:6e:14:34:3a:85:1d root@example.com (RSA)
SSH의 이전 버전은 명령에서 -E md5
를 제거해야 할 수 있습니다.
관련 주제
- 저장소 미러링에 대한 문제 해결.
- 풀 미러링 간격 구성
- 프로젝트의 미러를 비활성화
- 시크릿 파일과 미러링