- 푸시 미러링 구성
- 다른 참조 유지
- GitLab에서 GitHub로 푸시 미러 설정
- GitLab에서 AWS CodeCommit으로 푸시 미러 설정하기
- 2FA가 활성화된 다른 GitLab 인스턴스에 푸시 미러 설정하기
- 관련 주제
푸시 미러링
푸시 미러(push mirror)는 상류 리포지토리에 대해 이루어진 커밋을 미러링하는 다운스트림 리포지토리입니다. 푸시 미러는 상류 리포지토리에 이루어진 커밋의 복사본을 수동으로 받습니다. 미러가 상류 리포지토리와 다르게 되지 않도록 하기 위해, 커밋을 다운스트림 미러에 직접 푸시하지 마십시오. 대신 상류 리포지토리에 커밋을 푸시하세요.
풀 미러링이 상류 리포지토리에서 주기적으로 업데이트를 검색하는 반면, 푸시 미러는 다음과 같은 상황에서만 변경 사항을 받습니다:
- 커밋이 상류 GitLab 리포지토리에 푸시될 때.
- 관리자가 미러를 강제로 업데이트할 때.
상류 리포지토리에 변경 사항을 푸시하면 푸시 미러가 이를 받습니다:
- 5분 이내에.
- 보호된 브랜치만 미러링이 활성화된 경우 1분 이내에.
브랜치가 기본 브랜치에 병합되고 소스 프로젝트에서 삭제되면, 다음 푸시 시 원격 미러에서 삭제됩니다. 병합되지 않은 변경 사항이 있는 브랜치는 유지됩니다. 브랜치가 분기될 경우 미러링 리포지토리 섹션에서 오류가 표시됩니다.
GitLab Silent Mode는 원격 미러에 대한 푸시 및 풀을 비활성화합니다.
푸시 미러링 구성
기존 프로젝트에 대한 푸시 미러링을 설정하려면:
- 좌측 사이드바에서 검색 또는 이동을 선택하고 프로젝트를 찾습니다.
- 설정 > 리포지토리를 선택합니다.
- 미러링 리포지토리를 확장합니다.
- 리포지토리 URL을 입력합니다.
- 미러 방향 드롭다운 목록에서 푸시를 선택합니다.
- 인증 방법을 선택합니다. 자세한 내용은 미러의 인증 방법을 참조하세요.
- 필요에 따라 보호된 브랜치만 미러링을 선택합니다.
- 원하는 경우 다른 참조 유지를 선택합니다.
- 구성을 저장하려면 미러 리포지토리를 선택합니다.
API를 통한 푸시 미러 구성
프로젝트 푸시 미러를 원격 미러 API를 통해 생성하고 수정할 수도 있습니다.
다른 참조 유지
기본적으로, 원격(다운스트림) 미러에서 참조(브랜치 또는 태그)가 로컬 리포지토리와 다르게 되면, 상류 리포지토리가 원격의 모든 변경 사항을 덮어씁니다:
- 리포지토리가
main
및develop
브랜치를 원격으로 미러링합니다. - 원격 미러의
develop
에 새로운 커밋이 추가됩니다. - 다음 푸시가 원격 미러를 상류 리포지토리와 일치하도록 업데이트합니다.
- 원격 미러의
develop
에 추가된 새로운 커밋이 손실됩니다.
다른 참조 유지를 선택하면 변경 사항이 다르게 처리됩니다:
- 원격 미러의
develop
브랜치에 대한 업데이트가 건너뜁니다. - 원격 미러의
develop
브랜치는 상류 리포지토리에 존재하지 않는 커밋을 보존합니다. 원격 미러에 존재하지만 상류에는 없는 모든 참조는 그대로 둡니다. - 업데이트가 실패로 표시됩니다.
미러를 생성한 후에는 원격 미러 API를 통해서만 다른 참조 유지의 값을 수정할 수 있습니다.
GitLab에서 GitHub로 푸시 미러 설정
GitLab에서 GitHub로 미러를 구성하려면:
-
GitHub 세밀한 개인 액세스 토큰을 생성합니다. 이 토큰은 리포지토리 내용에 대한 읽기 및 쓰기 권한이 있어야 합니다. 리포지토리에
.github/workflows
디렉토리가 포함된 경우, 워크플로우에 대한 읽기 및 쓰기 액세스도 부여해야 합니다. 더 세밀한 액세스를 원한다면, 특정 리포지토리에만 적용되도록 토큰을 구성할 수 있습니다. -
다음 형식으로 Git 리포지토리 URL을 입력합니다. 필요에 따라 변수를 변경하세요:
https://github.com/GROUP/PROJECT.git
-
GROUP
: GitHub의 그룹. -
PROJECT
: GitHub의 프로젝트.
-
- 사용자 이름에 개인 액세스 토큰 소유자의 사용자 이름을 입력합니다.
- 비밀번호에 GitHub 개인 액세스 토큰을 입력합니다.
- 미러 리포지토리를 선택합니다.
미러링된 리포지토리가 나열됩니다. 예를 들면 다음과 같습니다:
https://*****:*****@github.com/<your_github_group>/<your_github_project>.git
그 후 곧 리포지토리에 푸시됩니다. 강제로 푸시하려면 지금 업데이트하기()를 선택합니다.
GitLab에서 AWS CodeCommit으로 푸시 미러 설정하기
AWS CodeCommit 푸시 미러링은 GitLab 저장소를 AWS CodePipeline에 연결하는 최상의 방법입니다. GitLab은 아직 그들의 소스 코드 관리(SCM) 제공업체 중 하나로 지원되지 않습니다.
각 새로운 AWS CodePipeline은 상당한 AWS 인프라 설정이 필요합니다. 또한 브랜치마다 개별 파이프라인이 요구됩니다.
만약 AWS CodeDeploy가 CodePipeline의 마지막 단계라면, 대신 이 도구들을 결합하여 배포를 생성할 수 있습니다:
- GitLab CI/CD 파이프라인.
- CodeDeploy에 배포하기 위한
.gitlab-ci.yml
의 최종 작업에서 AWS CLI.
GitLab에서 AWS CodeCommit으로 미러를 설정하려면:
-
AWS IAM 콘솔에서 IAM 사용자를 생성합니다.
-
미러링을 위한 다음 최소 권한을 인라인 정책으로 추가합니다.
Amazon 리소스 이름(ARN)은 지역 및 계정을 명시적으로 포함해야 합니다. 이 IAM 정책은 두 개의 샘플 저장소에 대한 미러링 액세스 권한을 부여합니다. 이 권한은 미러링에 필요한 최소(최소 권한)로 테스트되었습니다:
{ "Version": "2012-10-17", "Statement": [ { "Sid": "MinimumGitLabPushMirroringPermissions", "Effect": "Allow", "Action": [ "codecommit:GitPull", "codecommit:GitPush" ], "Resource": [ "arn:aws:codecommit:us-east-1:111111111111:MyDestinationRepo", "arn:aws:codecommit:us-east-1:111111111111:MyDemo*" ] } ] }
-
사용자가 생성된 후, AWS IAM 사용자 이름을 선택합니다.
-
보안 자격 증명 탭을 선택합니다.
-
AWS CodeCommit을 위한 HTTPS Git 자격 증명 아래에서 자격 증명 생성을 선택합니다.
이 Git 사용자 ID와 비밀번호는 CodeCommit과의 통신에 특정합니다. 이 사용자에 대한 IAM 사용자 ID 또는 AWS 키와 혼동하지 마세요. -
특별한 Git HTTPS 사용자 ID와 비밀번호를 복사하거나 다운로드합니다.
-
AWS CodeCommit 콘솔에서 GitLab 저장소에서 미러링할 새 저장소를 생성합니다.
-
새 저장소를 열고, 오른쪽 상단에서 코드 > HTTPS 클론을 선택합니다( HTTPS 클론(GRC)가 아님).
-
GitLab에서 푸시 미러링할 저장소를 엽니다.
-
설정 > 저장소를 선택한 후 미러링 저장소를 확장합니다.
-
이 형식을 사용하여 Git 저장소 URL 필드를 작성합니다.
<aws-region>
은 AWS 지역으로 바꾸고,<your_codecommit_repo>
는 CodeCommit의 저장소 이름으로 바꿉니다:https://git-codecommit.<aws-region>.amazonaws.com/v1/repos/<your_codecommit_repo>
-
인증 방법으로 사용자 이름 및 비밀번호를 선택합니다.
-
사용자 이름에 AWS 특별 HTTPS Git 사용자 ID를 입력합니다.
-
비밀번호에 AWS에서 이전에 생성한 특별 IAM Git 클론 사용자 ID 비밀번호를 입력합니다.
-
CodeCommit을 위해 단지 보호된 브랜치만 미러링 옵션을 남겨둡니다. 더 자주 푸시됩니다(매 5분마다에서 매 1분으로).
CodePipeline은 AWS CI 설정을 원하는 명명된 브랜치마다 개별 파이프라인 설정이 필요합니다. 동적 이름을 가진 기능 브랜치는 지원되지 않으므로, 단지 보호된 브랜치만 미러링을 설정하는 것은 CodePipeline 통합에서 유연성 문제를 일으키지 않습니다. 모든 명명된 브랜치를 보호해야 합니다.
-
미러 저장소를 선택합니다. 미러링된 저장소가 나타나야 합니다:
https://*****:*****@git-codecommit.<aws-region>.amazonaws.com/v1/repos/<your_codecommit_repo>
미러링을 강제로 푸시하여 테스트하려면 지금 업데이트를 선택합니다(반원 화살표).
마지막 성공적인 업데이트에 날짜가 표시되면 미러링이 올바르게 구성된 것입니다.
정상적으로 작동하지 않으면, 빨간색 오류
태그가 나타나며 오류 메시지가 호버 텍스트로 표시됩니다.
2FA가 활성화된 다른 GitLab 인스턴스에 푸시 미러 설정하기
-
대상 GitLab 인스턴스에서
write_repository
범위를 가진 개인 액세스 토큰을 생성합니다. -
소스 GitLab 인스턴스에서:
- 다음 형식을 사용하여 Git 저장소 URL을 입력합니다:
https://<destination host>/<your_gitlab_group_or_name>/<your_gitlab_project>.git
. -
사용자 이름에
oauth2
를 입력합니다. - 비밀번호를 입력합니다. 대상 GitLab 인스턴스에서 생성된 GitLab 개인 액세스 토큰을 사용합니다.
- 미러 저장소를 선택합니다.
- 다음 형식을 사용하여 Git 저장소 URL을 입력합니다: