리포지터리 미러링
Offering: GitLab.com, GitLab Self-Managed, GitLab Dedicated
외부 소스와 리포지터리를 미러링할 수 있습니다. 다음과 같은 경우 리포지터리를 미러링합니다: 상단 바에서 Search or go to를 선택하고 프로젝트를 찾습니다. 왼쪽 사이드바에서 Settings > Repository를 선택합니다.
외부 소스와 리포지터리를 미러링할 수 있습니다. 어떤 리포지터리가 소스로 사용될지 선택할 수 있습니다. 브랜치, 태그, 커밋은 자동으로 동기화됩니다.
여러 가지 미러링 방법이 있습니다:
- 푸시: GitLab에서 다른 위치로 리포지터리를 미러링합니다.
- 풀: 다른 위치에서 리포지터리를 미러링합니다. Premium 및 Ultimate 티어에서 사용 가능합니다.
- 양방향 미러링도 가능하지만 충돌이 발생할 수 있습니다.
다음과 같은 경우 리포지터리를 미러링합니다:
- 프로젝트의 정규 버전이 GitLab으로 마이그레이션되었습니다. 이전 위치에서 프로젝트의 복사본을 계속 제공하려면 GitLab 리포지터리를 푸시 미러로 구성합니다. GitLab 리포지터리에서 변경한 내용은 이전 위치에 복사됩니다.
- GitLab 인스턴스는 비공개이지만 일부 프로젝트를 오픈소스로 공개하고 싶습니다.
- GitLab으로 마이그레이션했지만 프로젝트의 정규 버전이 다른 곳에 있습니다. GitLab 리포지터리를 다른 프로젝트의 풀 미러로 구성합니다. GitLab 리포지터리는 프로젝트의 커밋, 태그, 브랜치의 복사본을 가져옵니다. GitLab에서 사용할 수 있게 됩니다.
다음은 지원되지 않습니다:
- SCP 스타일 URL. SCP 스타일 URL 구현 작업이 진행 중입니다. 자세한 내용과 진행 상황을 추적하려면 이슈 18993을 참조하세요.
- dumb HTTP 프로토콜을 통한 리포지터리 미러링.
리포지터리 미러 만들기#
사전 요건:
- 프로젝트에 대한 유지 관리자(Maintainer) 또는 소유자(Owner) 권한이 있어야 합니다.
- 미러가
ssh://로 연결하는 경우 서버에서 호스트 키를 감지할 수 있거나 키의 로컬 복사본이 있어야 합니다.
-
상단 바에서 Search or go to를 선택하고 프로젝트를 찾습니다.
-
왼쪽 사이드바에서 Settings > Repository를 선택합니다.
-
Mirroring repositories를 확장합니다.
-
Add new를 선택합니다.
-
Git repository URL을 입력합니다. 리포지터리는
http://,https://,ssh://, 또는git://로 접근 가능해야 합니다. -
ssh://URL을 입력한 경우 다음 중 하나를 선택합니다:- Detect host keys: GitLab이 서버에서 호스트 키를 가져오고 지문을 표시합니다.
- Input host keys manually: 호스트 키를 SSH host key에 입력합니다.
리포지터리를 미러링할 때 GitLab은 연결하기 전에 저장된 호스트 키 중 하나 이상이 일치하는지 확인합니다. 이 검사는 악의적인 코드 주입이나 비밀번호 도용으로부터 미러를 보호합니다.
- SSH 인증으로 리포지터리 미러를 만들려면 SSH 인증으로 미러 만들기 예시를 참조하세요.
-
Authentication method를 선택합니다. 자세한 내용은 미러의 인증 방법을 참조하세요.
-
SSH 호스트 키로 인증하는 경우 올바른지 확인하기 위해 호스트 키를 확인합니다.
-
분기된 참조에 대한 강제 푸시를 방지하려면 Keep divergent refs를 선택합니다. 자세한 내용은 분기된 참조 유지를 참조하세요.
-
선택 사항. 미러링되는 브랜치 수를 제한하려면 Mirror only protected branches를 선택하거나 Mirror specific branches에 정규 표현식을 입력합니다.
-
Mirror repository를 선택합니다.
예시: SSH 인증으로 미러 만들기#
인증 방법으로 SSH public key를 선택하면 GitLab이 GitLab 리포지터리에 대한 공개 키를 생성합니다. 이 키를 GitLab이 아닌 서버에 제공해야 합니다.
자세한 내용은 SSH 공개 키 가져오기를 참조하세요.
SSH 인증으로 리포지터리를 미러링하려면:
-
상단 바에서 Search or go to를 선택하고 프로젝트를 찾습니다.
-
왼쪽 사이드바에서 Settings > Repository를 선택합니다.
-
Mirroring repositories를 확장합니다.
-
Add new를 선택합니다.
-
Git repository URL을 입력합니다.
ssh://gitlab.com/gitlab-org/gitlab.git형식의 URL을 제공합니다.[!note] SSH URL은 SCP 스타일 URL(
git@host:path/to/repo.git) 대신ssh://host/path/to/repo.git형식을 사용해야 합니다. 콜론(:)을 슬래시(/)로 바꾸고ssh://접두사를 추가합니다. -
Detect host keys 또는 Input host keys manually를 선택합니다.
-
Authentication method 필드에서 SSH public key를 선택합니다.
-
Username 필드에
git을 추가합니다. -
선택 사항. Mirror branches 설정을 구성합니다.
-
Mirror repository를 선택합니다.
-
SSH 공개 키를 복사하고 GitLab이 아닌 서버에 제공합니다.
보호된 브랜치만 미러링#
미러링 프로젝트의 보호된 브랜치만 원격 리포지터리로 또는 원격 리포지터리에서 미러링하도록 선택할 수 있습니다. 풀 미러링의 경우 미러링 프로젝트의 보호되지 않은 브랜치는 미러링되지 않고 분기될 수 있습니다.
이 옵션을 사용하려면 리포지터리 미러를 만들 때 Only mirror protected branches를 선택합니다.
특정 브랜치만 미러링#
RE2 정규 표현식과 일치하는 이름의 브랜치만 미러링하려면 Mirror specific branches 필드에 정규 표현식을 입력합니다. 정규 표현식과 일치하지 않는 이름의 브랜치는 미러링되지 않습니다.
미러 업데이트#
미러 리포지터리가 업데이트되면 모든 새 브랜치, 태그, 커밋이 프로젝트의 활동 피드에 표시됩니다. GitLab의 리포지터리 미러는 자동으로 업데이트됩니다. 수동으로 업데이트를 트리거할 수도 있습니다:
- GitLab.com에서 최대 5분에 한 번.
- GitLab Self-Managed 인스턴스에서 관리자가 설정한 풀 미러링 간격 한도에 따라.
GitLab 사일런트 모드는 푸시 및 풀 업데이트 모두를 비활성화합니다.
업데이트 강제 적용#
미러는 자동으로 업데이트되도록 예약되어 있지만 다음 경우를 제외하고 즉시 업데이트를 강제 적용할 수 있습니다:
- 미러가 이미 업데이트 중인 경우.
- 마지막 업데이트 후 풀 미러링 한도의 간격(초)이 경과하지 않은 경우.
사전 요건:
- 프로젝트에 대한 유지 관리자(Maintainer) 또는 소유자(Owner) 권한이 있어야 합니다.
- 상단 바에서 Search or go to를 선택하고 프로젝트를 찾습니다.
- 왼쪽 사이드바에서 Settings > Repository를 선택합니다.
- Mirroring repositories를 확장합니다.
- Mirrored repositories로 스크롤하여 업데이트할 미러를 식별합니다.
- Update now([retry])를 선택합니다.
미러의 인증 방법#
미러를 만들 때 미러에 대한 인증 방법을 구성해야 합니다. GitLab은 다음 인증 방법을 지원합니다:
- SSH 인증.
- 사용자 이름 및 비밀번호.
프로젝트 액세스 토큰 또는 그룹 액세스 토큰의 경우 비어 있지 않은 값을 사용자 이름으로 사용하고 토큰을 비밀번호로 사용합니다.
SSH 인증#
SSH 인증은 상호적입니다:
- 리포지터리에 접근할 수 있다는 것을 서버에 증명해야 합니다.
- 서버도 자신이 주장하는 대로임을 증명해야 합니다.
SSH 인증을 위해 비밀번호 또는 공개 키로 자격 증명을 제공합니다. 다른 리포지터리가 있는 서버는 호스트 키로 자격 증명을 제공합니다. 이 호스트 키의 지문을 수동으로 확인해야 합니다.
SSH를 통해 미러링하는 경우(ssh:// URL 사용) 다음을 사용하여 인증할 수 있습니다:
- 비밀번호 기반 인증, HTTPS를 통한 것과 마찬가지로.
- 공개 키 인증. 이 방법은 특히 다른 리포지터리가 배포 키를 지원하는 경우 비밀번호 인증보다 더 안전한 경우가 많습니다.
SSH 공개 키 가져오기#
리포지터리를 미러링하고 인증 방법으로 SSH public key를 선택하면 GitLab이 공개 키를 생성합니다. GitLab이 아닌 서버는 GitLab 리포지터리와의 신뢰를 설정하기 위해 이 키가 필요합니다. SSH 공개 키를 복사하려면:
- 상단 바에서 Search or go to를 선택하고 프로젝트를 찾습니다.
- 왼쪽 사이드바에서 Settings > Repository를 선택합니다.
- Mirroring repositories를 확장합니다.
- Mirrored repositories로 스크롤합니다.
- 올바른 리포지터리를 식별하고 Copy SSH public key([copy-to-clipboard])를 선택합니다.
- 다른 리포지터리의 구성에 공개 SSH 키를 추가합니다:
- 다른 리포지터리가 GitLab에서 호스팅되는 경우 공개 SSH 키를 배포 키로 추가합니다.
- 다른 리포지터리가 다른 곳에서 호스팅되는 경우 사용자의
authorized_keys파일에 키를 추가합니다. 전체 공개 SSH 키를 별도의 줄에 파일에 붙여넣고 저장합니다.
언제든지 키를 변경해야 하는 경우 미러를 제거하고 다시 추가하여 새 키를 생성할 수 있습니다. 미러가 계속 실행되도록 새 키로 다른 리포지터리를 업데이트합니다.
생성된 키는 파일 시스템이 아닌 GitLab 데이터베이스에 저장됩니다. 따라서 미러에 대한 SSH 공개 키 인증은 pre-receive 훅에서 사용할 수 없습니다.
호스트 키 확인#
호스트 키를 사용할 때 지문이 예상한 것과 일치하는지 항상 확인합니다. GitLab.com 및 다른 코드 호스팅 사이트는 확인을 위해 지문을 게시합니다:
다른 공급자는 다양합니다. 다음 경우 다음 명령으로 키 지문을 안전하게 수집할 수 있습니다:
- GitLab Self-Managed를 실행하는 경우.
- 다른 리포지터리의 서버에 접근할 수 있는 경우.
$ 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를 제거해야 할 수 있습니다.
관련 항목#
- 리포지터리 미러링의 문제 해결.
- 풀 미러링 간격 구성
- 프로젝트에 대한 미러 비활성화
- 시크릿 파일과 미러링
