푸시 미러링

Tier: Free, Premium, Ultimate Offering: GitLab.com, Self-Managed, GitLab Dedicated

_푸시 미러_는 상류 리포지터리에서 만든 커밋을 미러하는 하류 리포지터리입니다. 푸시 미러는 매뉴얼으로 커밋을 상류 리포지터리에 복제받습니다. 하류 미러에 직접 커밋을 푸시하지 않고 상류 리포지터리에 커밋을 푸시하여 미러가 상류 리포지터리와 달라지지 않도록 합니다.

풀 미러링이 상류 리포지터리에서 주기적으로 업데이트를 검색하는 반면, 푸시 미러는 다음의 경우에만 변경 사항을 받습니다.

상류 리포지터리에 변경 내용을 푸시하면, 푸시 미러는 다음과 같이 받습니다.

  • 5분 이내에 받습니다.
  • Only mirror protected branches를 활성화했다면 1분 이내로 받습니다.

분기가 기본 분기에 Merge되고 원본 프로젝트에서 삭제되면, 다음 푸시 시에 원격 미러에서도 삭제됩니다. Merge되지 않은 변경 사항이 있는 분기는 유지됩니다. 분기가 다르게 되면 미러링 리포지터리 섹션에 오류가 표시됩니다.

GitLab Silent Mode를 사용하면 원격 미러로부터 푸시하거나 풀하지 못하게 합니다.

푸시 미러링 구성

기존 프로젝트에 푸시 미러링을 설정하려면 다음을 수행하세요.

  1. 왼쪽 사이드바에서 검색 또는 이동을 선택하고 프로젝트를 찾습니다.
  2. 설정 > 리포지터리를 선택합니다.
  3. 미러링 리포지터리를 확장합니다.
  4. 리포지터리 URL을 입력합니다.
  5. 미러 방향 드롭다운 디렉터리에서 푸시를 선택합니다.
  6. 인증 방법을 선택합니다. 자세한 내용은 미러용 인증 방법을 참조하세요.
  7. 필요한 경우 Only mirror protected branches를 선택합니다.
  8. 원하는 경우 Keep divergent refs를 선택합니다.
  9. 구성을 저장하려면 리포지터리 미러링을 선택합니다.

API를 통한 푸시 미러링 구성

프로젝트 푸시 미러를 만들고 수정할 수도 있습니다. 원격 미러 API를 참조하세요.

다른 refs 유지하기

기본적으로 원격(하류) 미러의 모든 refs(브랜치 또는 태그)가 로컬 리포지터리와 달라지면 상류 리포지터리가 원격 미러의 변경 내용을 덮어씁니다.

  1. 리포지터리는 maindevelop 브랜치를 원격 미러로 미러링합니다.
  2. 원격 미러에 develop에 새 커밋이 추가됩니다.
  3. 다음 푸시에서 원격 미러를 상위 리포지터리와 일치시킵니다.
  4. 원격 미러에 추가된 develop의 새 커밋이 손실됩니다.

다른 refs 유지하기를 선택하면 변경 사항은 다르게 처리됩니다.

  1. 원격 미러의 develop 브랜치 업데이트가 건너뜁니다.
  2. 원격 미러의 develop 브랜치는 상류 리포지터리에 없는 커밋을 유지합니다. 상류에 없는 refs는 그대로 유지됩니다.
  3. 업데이트가 실패로 표시됩니다.

미러를 만든 후에 다른 refs 유지하기의 값을 변경할 수 있는 유일한 방법은 원격 미러 API를 사용하는 것입니다.

GitLab에서 GitHub로 푸시 미러 구성

GitLab에서 GitHub로 미러를 구성하려면 다음을 수행하세요.

  1. GitHub 세분화된 개인 액세스 토큰을 만듭니다. 해당 토큰은 최소한 리포지터리 콘텐츠에 대한 읽기 및 쓰기 권한을 부여해야 합니다. 리포지터리에 .github/workflows 디렉터리가 포함되어 있다면 Workflows에 대한 읽기 및 쓰기 액세스도 부여해야 합니다. 더 세분화된 액세스를 위해 해당 토큰을 특정 리포지터리에만 적용하도록 구성할 수 있습니다.
  2. 필요한 변수를 변경하여 아래 형식의 Git 리포지터리 URL을 입력합니다.

    https://github.com/GROUP/PROJECT.git
    
    • GROUP: GitHub의 그룹 이름
    • PROJECT: GitHub의 프로젝트 이름
  3. 사용자 이름에 개인 액세스 토큰 소유자의 사용자 이름을 입력합니다.
  4. 비밀번호에 GitHub 개인 액세스 토큰을 입력합니다.
  5. 미러 리포지터리를 선택합니다.

미러 리포지터리가 나열됩니다. 예를 들어:

https://*****:*****@github.com/<your_github_group>/<your_github_project>.git

잠시 후 리포지터리가 푸시됩니다. 강제로 푸시하려면 지금 업데이트를 선택하세요 ().

GitLab에서 AWS CodeCommit으로 푸시 미러 설정

AWS CodeCommit 푸시 미러링은 GitLab 리포지터리를 AWS CodePipeline에 연결하는 가장 좋은 방법입니다. GitLab은 아직 그들의 Source Code Management (SCM) 제공자로 지원되지 않습니다. 각 새로운 AWS CodePipeline에는 중요한 AWS 인프라 설정이 필요합니다. 또한 각 브랜치마다 개별 파이프라인이 필요합니다.

AWS CodeDeploy가 CodePipeline의 최종 단계인 경우 이 도구들을 결합하여 배포를 만들 수도 있습니다.

  • GitLab CI/CD 파이프라인
  • .gitlab-ci.yml의 마지막 작업에서 AWS CLI를 사용하여 CodeDeploy로 배포
note
AWS CodeCommit 푸시 미러링은 GitLab issue 34014이 해결되기 전까지 SSH 인증을 사용할 수 없습니다.

GitLab에서 AWS CodeCommit으로 미러링을 설정하려면 다음을 수행하세요.

  1. AWS IAM 콘솔에서 IAM 사용자를 만듭니다.
  2. 다음과 같이 리포지터리 미러링을 위한 최소한의 권한을 인라인 정책으로 추가합니다.

    Amazon Resource Names(ARNs)은 지역 및 계정을 명시적으로 포함해야 합니다. 해당 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*"
                ]
            }
        ]
    }
    
  3. 사용자가 생성되면 AWS IAM 사용자 이름을 선택합니다.
  4. 보안 자격 증명 탭을 선택합니다.
  5. AWS CodeCommit용 HTTPS Git 자격 증명 아래에서 자격 증명 생성을 선택합니다.

    note
    해당 Git 사용자 ID와 암호는 CodeCommit과 통신하기 위한 것입니다. 이것은 사용자의 IAM 사용자 ID나 이 사용자의 AWS 키와 혼동해서는 안 됩니다.
  6. 특별한 Git HTTPS 사용자 ID 및 암호를 복사하거나 다운로드합니다.
  7. AWS CodeCommit 콘솔에서 GitLab 리포지터리를 미러링할 새 리포지터리를 만듭니다.
  8. 새 리포지터리를 열고 오른쪽 상단에서 Code > HTTPS 클론을 선택합니다 (HTTPS(GRC) 클론이 아님).
  9. GitLab에서 푸시 미러링을 수행할 리포지터리를 엽니다.
  10. 설정 > 리포지터리를 선택한 다음 미러링 리포지터리를 확장합니다.
  11. 다음 형식의 Git 리포지터리 URL 필드에 정보를 입력합니다. <aws-region>을 AWS 지역으로, <your_codecommit_repo>를 CodeCommit의 리포지터리 이름으로 변경합니다.

    https://git-codecommit.<aws-region>.amazonaws.com/v1/repos/<your_codecommit_repo>
    
  12. 인증 방법에서 사용자 이름 및 암호를 선택합니다.
  13. 사용자 이름에 AWS 특별 HTTPS Git 사용자 ID를 입력합니다.
  14. 비밀번호에 AWS에서 이전에 생성한 IAM Git 클론 사용자 ID 암호를 입력합니다.
  15. CodeCommit의 경우 Only mirror protected branches 옵션을 유지합니다. 더 자주 푸시됩니다(5분마다에서 1분마다).

    CodePipeline은 AWS CI 설정을 위해 명명된 브랜치를 위한 개별 파이프라인 설정이 필요합니다. 동적 이름의 기능 브랜치가 지원되지 않기 때문에 Only mirror protected branches를 구성하면 CodePipeline 통합에 유연성 문제가 발생하지 않습니다. 빌드하려는 모든 명명된 브랜치를 보호해야 합니다.

  16. 미러 리포지터리를 선택합니다. 미러링된 리포지터리가 나타납니다:

    https://*****:*****@git-codecommit.<aws-region>.amazonaws.com/v1/repos/<your_codecommit_repo>
    

미러링을 테스트하려면 강제로 푸시하려면 지금 업데이트를 선택하세요. 마지막 성공적인 업데이트가 날짜로 표시되면 미러링이 올바르게 구성된 것입니다. 올바르게 작동하지 않으면 빨간색 error 태그가 표시되며 오류 메시지가 호버 텍스트로 표시됩니다.

다른 GitLab 인스턴스에 2단계 인증이 활성화된 푸시 미러 설정

  1. 대상 GitLab 인스턴스에서 개인 액세스 토큰write_repository 범위로 생성합니다.
  2. 소스 GitLab 인스턴스에서:
    1. 이 형식을 사용하여 Git 리포지터리 URL을 입력합니다: https://<대상 호스트>/<귀하의_gitlab_그룹_또는_이름>/<귀하의_gitlab_프로젝트>.git.
    2. 사용자 이름 oauth2를 입력합니다.
    3. 비밀번호를 입력합니다. 대상 GitLab 인스턴스에서 생성한 GitLab 개인 액세스 토큰을 사용합니다.
    4. 리포지터리 미러를 선택합니다.

관련 주제