푸시 미러링

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

푸시 미러링은 상류 저장소에 작성된 커밋을 반영하는 하류 저장소입니다. 푸시 미러는 상류 저장소에 작성된 커밋의 사본을 수동으로 수신합니다. 하류 미러에 직접 커밋을 푸시하지 않도록 하기 위해 하류 저장소로 직접 커밋을 푸시하지 마세요. 대신 상류 저장소로 커밋을 푸시하세요.

풀 미러링이 상류 저장소에서 주기적으로 업데이트를 검색하는 반면, 푸시 미러는 다음 시점에만 변경 사항을 수신합니다:

  • 커밋이 상류 GitLab 저장소로 푸시될 때
  • 관리자가 미러를 강제로 업데이트할 때

상류 저장소로 변경 사항을 푸시하면 푸시 미러가 해당 변경 사항을 다음과 같이 수신합니다:

  • 5분 이내
  • Only mirror protected branches를 활성화한 경우 1분 이내

한 프로젝트에서 브랜치가 기본 브랜치로 병합되고 소스 프로젝트에서 삭제된 경우, 다음 푸시에서 원격 미러에서 해당 브랜치가 삭제됩니다. 병합되지 않은 변경이 있는 브랜치는 유지됩니다. 브랜치가 차이가 나는 경우, 미러링 저장소 섹션에 오류가 표시됩니다.

GitLab Silent Mode은 원격 미러로부터 푸시 및 풀을 비활성화합니다.

푸시 미러링 구성

기존 프로젝트에 대해 푸시 미러링을 설정하려면:

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

API를 통한 푸시 미러링 구성

프로젝트 푸시 미러링을 생성하고 수정할 수도 있습니다. 원격 미러 API를 통해.

분기 차이 유지

기본적으로, 원격(하류) 미러에서 어떤 참조(브랜치 또는 태그)가 로컬 저장소와 달라지면 상류 저장소가 원격에 있는 변경 사항을 덮어쓸 수 있습니다:

  1. 저장소는 maindevelop 브랜치를 원격으로 미러링합니다.
  2. 원격 미러에 develop에 새로운 커밋이 추가됩니다.
  3. 다음 푸시에서 원격 미러가 상류 저장소에 맞게 업데이트됩니다.
  4. 원격 미러에 추가된 develop의 새로운 커밋이 사라집니다.

만약 차이 보존을 선택하면 변경 사항은 다르게 처리됩니다:

  1. 원격 미러의 develop 브랜치의 업데이트가 건너뛰어집니다.
  2. 원격 미러의 develop 브랜치는 상류 저장소에 없는 커밋을 보존합니다. 원격에 존재하지만 상류에는 없는 참조는 건드리지 않습니다.
  3. 업데이트는 실패로 표시됩니다.

미러를 생성한 후에는 차이 보존의 값을 원격 미러 API를 통해 수정할 수 있습니다.

GitLab에서 GitHub로 푸시 미러링 설정

GitLab에서 GitHub로 미러를 구성하는 방법:

  1. GitHub fine-grained personal access token을 만들어야 합니다. 최소한 리포지토리 콘텐츠에 대한 읽기 및 쓰기 권한이 있어야 합니다. 만약 리포지토리에 .github/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 푸시 미러링은 AWS CodePipeline과 GitLab 저장소를 연결하는 가장 좋은 방법입니다. 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으로 미러를 설정하려면 다음을 수행하세요:

  1. AWS IAM 콘솔에서 IAM 사용자를 생성합니다.
  2. 다음과 같이 리포지토리 미러링을 위한 최소 권한 권한을 inline policy로 추가합니다.

    Amazon 리소스 이름(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 자격 증명 아래에서 자격 증명 생성을 선택합니다.

    참고: 이 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을 위해 보호된 브랜치만 미러링 옵션을 남겨 둡니다. 이는 더 자주 푸시합니다 (5분마다에서 1분마다).

    CodePipeline은 AWS CI 설정을 위해 명명된 브랜치마다 개별 파이프라인 설정을 필요로 합니다. 동적 이름을 가진 기능 브랜치는 지원되지 않기 때문에 보호된 브랜치만 미러링 구성은 CodePipeline 통합에서 유연성 문제를 일으키지 않습니다. 빌드하려는 모든 명명된 브랜치들을 보호해야 합니다.

  16. 미러링 리포지토리를 선택하세요. 미러링된 리포지토리가 표시되어야 합니다:

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

푸시를 강제로 하여 미러링을 테스트하려면, 지금 업데이트를 선택하세요 (반원 모양 화살표). 마지막 성공적인 업데이트에 날짜가 표시되면, 미러링이 올바르게 구성된 것입니다. 올바르게 작동하지 않으면, 빨간색 ‘error’ 태그가 나타나고 오류 메시지가 호버 텍스트로 표시됩니다.

2FA 활성화된 다른 GitLab 인스턴스로의 푸시 미러링 설정

  1. 대상 GitLab 인스턴스에서 write_repository 스코프로 개인 액세스 토큰을 생성합니다.
  2. 원본 GitLab 인스턴스에서:
    1. 다음 형식을 사용하여 Git 리포지토리 URL을 입력합니다: https://<destination host>/<your_gitlab_group_or_name>/<your_gitlab_project>.git.
    2. 사용자 이름oauth2를 입력합니다.
    3. 비밀번호에 대상 GitLab 인스턴스에서 생성한 GitLab 개인 액세스 토큰을 사용합니다.
    4. 미러링 리포지토리를 선택합니다.

관련 주제