- 푸시 미러링 구성
- Keep divergent refs
- GitLab에서 GitHub로 푸시 미러링 설정하기
- GitLab에서 AWS CodeCommit로 푸시 미러링 설정하기
- 다른 GitLab 인스턴스에 2단계 인증이 활성화된 푸시 미러 설정하기
- 관련 주제
푸시 미러링
푸시 미러링은 상위 저장소에 대한 커밋을 복제하는 하위 저장소입니다. 푸시 미러링은 상위 저장소에 만들어진 커밋을 수동으로 받아옵니다. 미러가 상위 저장소와 달라지지 않도록 하려면 하위 미러에 직접 커밋을 푸시하지 마세요. 대신 상위 저장소에 커밋을 푸시하세요.
풀 미러링이 상위 저장소에서 주기적으로 업데이트를 가져오는 반면, 푸시 미러링은 다음 상황에서만 변경 사항을 받습니다:
- 커밋이 상위 GitLab 저장소에 푸시될 때
- 관리자가 미러를 강제 업데이트할 때
상위 저장소에 변경 사항을 푸시하면 푸시 미러는 이를 받습니다:
- 5분 이내
- Only mirror protected branches를 활성화한 경우, 1분 이내
분기가 기본 분기에 병합되고 원본 프로젝트에서 삭제되면, 다음 푸시에서 원격 미러에서도 삭제됩니다. 병합되지 않은 변경 사항이 있는 분기는 유지됩니다. 분기가 벌어지면 미러링 저장소 섹션에 오류가 표시됩니다.
GitLab Silent Mode를 사용하면 원격 미러로의 푸시 및 풀을 비활성화할 수 있습니다.
푸시 미러링 구성
기존 프로젝트에 푸시 미러링을 설정하는 방법:
- 왼쪽 사이드바에서 검색 또는 이동을 선택하고 프로젝트를 찾습니다.
- 설정 > 저장소를 선택합니다.
- 미러링 저장소를 확장합니다.
- 저장소 URL을 입력합니다.
- 미러 방향 드롭다운 목록에서 푸시를 선택합니다.
- 인증 방법을 선택합니다. 자세한 정보는 미러용 인증 방법을 참조하세요.
- 필요한 경우 Only mirror protected branches를 선택합니다.
- 원하는 경우 Keep divergent refs를 선택합니다.
- 구성을 저장하려면 저장소 미러링을 선택합니다.
API를 통한 푸시 미러링 구성
프로젝트 푸시 미러링을 생성하고 수정할 수도 있습니다. 원격 미러 API를 사용해야 합니다.
Keep divergent refs
기본적으로 원격(하위) 미러의 ref(분기 또는 태그) 중 로컬 저장소와 다른 경우 상위 저장소가 원격의 모든 변경 사항을 덮어씁니다:
- 저장소가
main
및develop
브랜치를 원격으로 미러링합니다. - 원격 미러에
develop
에 새 커밋이 추가됩니다. - 다음 푸시에서 원격 미러는 상위 저장소와 일치하도록 업데이트됩니다.
- 원격 미러에 추가된
develop
의 새 커밋이 사라집니다.
Keep divergent refs가 선택된 경우, 변경 사항은 다르게 처리됩니다:
- 원격 미러의
develop
브랜치 업데이트가 건너뜁니다. - 원격 미러의
develop
브랜치는 상위 저장소에 없는 커밋을 보존합니다. 원격 미러에 있는 상위 저장소에는 없지만 존재하는 ref는 건드리지 않습니다. - 업데이트는 실패로 표시됩니다.
미러를 생성한 후에는 Keep divergent refs의 값을 원격 미러 API를 통해서만 수정할 수 있습니다.
GitLab에서 GitHub로 푸시 미러링 설정하기
GitLab에서 GitHub로부터 미러를 구성하는 방법:
-
GitHub fine-grained 개인 액세스 토큰을 생성합니다. 최소한 리포지토리 콘텐츠에 대한 읽기 및 쓰기 권한이 필요합니다. 리포지토리에
.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 파이프라인
- .gitlab-ci.yml
의 마지막 작업에 AWS CLI를 사용하여 CodeDeploy에 배포를 생성
참고: GitLab issue 34014이 해결될 때까지 GitLab-to-AWS-CodeCommit 푸시 미러링은 SSH 인증을 사용할 수 없습니다.
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 저장소로부터 미러링할 새 저장소를 만듭니다.
- 새 저장소를 열어 오른쪽 상단에서 Code > HTTPS 복제를 선택합니다( HTTPS 복제(GRC)가 아님).
- GitLab에서 푸시 미러링을 설정할 저장소를 엽니다.
- 설정 > 저장소를 선택한 다음 미러링 저장소를 확장합니다.
-
Git 저장소 URL 필드를 이 형식으로 채우고,
을 AWS 지역으로, 그리고 를 CodeCommit의 저장소 이름으로 바꿉니다: https://git-codecommit.<aws-region>.amazonaws.com/v1/repos/<your_codecommit_repo>
- 인증 방법에서 사용자 이름 및 암호를 선택합니다.
- 사용자 이름에 AWS 특별 HTTPS Git 사용자 ID를 입력합니다.
- 비밀번호에 앞서 AWS에서 생성한 특별 IAM Git 클론 사용자 ID 암호를 입력합니다.
-
CodeCommit을 위해 Only mirror protected branches 옵션을 남겨 두세요. 더 자주 푸시합니다(5분마다부터 1분마다까지).
CodePipeline은 AWS CI 설정을 원하는 이름을 가진 분기에 대해 별도의 파이프라인 설정을 필요로 합니다. 동적 이름을 가진 기능 분기를 지원하지 않기 때문에, Only mirror protected branches 구성은 CodePipeline 통합에 유연성 문제를 일으키지 않습니다. 빌드하려는 모든 명명된 분기를 보호해야 합니다.
-
저장소 미러링을 선택합니다. 미러된 저장소가 나타나야 합니다:
https://*****:*****@git-codecommit.<aws-region>.amazonaws.com/v1/repos/<your_codecommit_repo>
푸시해서 미러링을 테스트하려면 지금 업데이트 (반이동 화살표)를 선택합니다. 마지막 성공적인 업데이트이 날짜가 표시되면, 미러링을 올바르게 구성한 것입니다. 올바르게 작동하지 않으면 빨간색 오류
태그와 오류 메시지가 호버 텍스트로 표시됩니다.
다른 GitLab 인스턴스에 2단계 인증이 활성화된 푸시 미러 설정하기
- 대상 GitLab 인스턴스에서
write_repository
스코프로 개인 액세스 토큰을 생성합니다. - 원본 GitLab 인스턴스에서:
- 이 형식을 사용하여 Git 저장소 URL을 입력합니다:
https://<대상 호스트>/<귀하의_gitlab_그룹_또는_이름>/<귀하의_gitlab_프로젝트>.git
. -
사용자 이름
oauth2
를 입력합니다. - 비밀번호를 입력합니다. 대상 GitLab 인스턴스에서 생성한 GitLab 개인 액세스 토큰을 사용합니다.
- 저장소 미러를 선택합니다.
- 이 형식을 사용하여 Git 저장소 URL을 입력합니다: