리포지터리 미러링
GitLab v19.5Offering: 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 프로토콜을 통한 리포지터리 미러링.
- 서로 다른 객체 형식을 사용하는 리포지터리 간 미러링. 예를 들어 SHA-1 리포지터리와 SHA-256 리포지터리 간 미러링입니다.
리포지터리 미러 만들기#
사전 요건:
- 프로젝트에 대한 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 호스트 키로 인증하는 경우 호스트 키를 확인하여 올바른지 검증합니다.
-
분기된 ref에 대한 강제 푸시를 방지하려면 Keep divergent refs를 선택합니다. 자세한 내용은 분기된 ref 유지를 참고합니다.
-
선택 사항. 미러링되는 브랜치 수를 제한하려면 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를 제거해야 할 수 있습니다.
관련 주제#
- 리포지터리 미러링의 문제 해결.
- 풀 미러링 간격 구성
- 프로젝트의 미러 비활성화
- 시크릿 파일과 미러링