푸시 미러링

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

- Introduced in GitLab 13.5: HTTPS를 통한 LFS 지원.

푸시 미러는 상류 리포지터리에 만들어진 커밋을 미러링하는 하류 리포지터리입니다.
푸시 미러는 상류 리포지터리에 만들어진 커밋 사본을 매뉴얼으로 받습니다.
미러가 상류 리포지터리와 달라지지 않도록 하려면, 커밋을 직접 하류 미러에 푸시하지 마세요. 대신 상류 리포지터리에 커밋을 푸시하세요.

풀 미러링이 상류 리포지터리로부터 주기적으로 업데이트를 검색하는 반면,
푸시 미러는 커밋이 상류 GitLab 리포지터리로 푸시될 때만 변경 사항을 받습니다.

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

상류 리포지터리에 변경 사항을 푸시하면 푸시 미러가 이를 받습니다:

  • 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 를 통해.

이탈한 참조 유지

History

- Introduced in GitLab 13.0.

기본적으로 원격(하류) 미러의 어떤 참조(브랜치 또는 태그)가 로컬 리포지터리와 다르면, 상류 리포지터리에서 해당 변경 사항을 덮어씁니다.

- 리포지터리가 maindevelop 브랜치를 원격으로 미러링합니다. - 원격 미러에 develop에 새로운 커밋이 추가됩니다. - 다음 푸시로 원격 미러가 상류 리포지터리와 일치하게 업데이트됩니다. - 원격 미러에 추가된 develop의 새로운 커밋이 삭제됩니다.

이탈한 참조 유지가 선택된 경우, 변경 사항이 다르게 처리됩니다: - 원격 미러의 develop 브랜치의 업데이트가 건너뜁니다. - 원격 미러의 develop 브랜치는 상류 리포지터리에 존재하지 않는 커밋을 보존합니다.
상류에 존재하지만 원격 미러에 존재하지 않는 참조는 그대로 유지됩니다. - 업데이트가 실패로 표시됩니다.

미러를 만든 후, 이탈한 참조 유지의 값을 변경할 수 있는 것은 원격 미러 API 를 통해서 뿐입니다.

GitLab에서 GitHub로 푸시 미러 설정

GitHub로부터 GitLab로 미러를 설정하려면:

  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은 아직까지 그들의 소스 코드 관리(SCM) 제공업체 중 하나로서 지원되지 않습니다.
각각의 AWS CodePipeline은 상당한 AWS 인프라 구성이 필요합니다. 또한 브랜치마다 개별 파이프라인이 필요합니다.

AWS CodeDeploy가 CodePipeline의 최종 단계인 경우, 대신 다음 도구를 결합하여 배포를 만들 수 있습니다:

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

AWS CodeCommit으로부터 GitLab로 미러를 설정하려면:

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

    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*"
                ]
            }
        ]
    }
    
  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. 새 리포지터리를 열어 오른쪽 상단에서 코드 > 클론 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를 위한 각각의 파이프라인 설정이 필요합니다. 동적 이름의 feature branches는 지원되지 않으므로, Only mirror protected branches 구성은 CodePipeline 통합에서의 유연성 문제를 일으키지 않습니다.
    CodePipelines를 위해 구축하려는 모든 명명된 분기를 보호해야 합니다.

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

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

미러링을 테스트하기 위해 강제 푸시를 선택해 지금 업데이트를 선택합니다.
마지막 성공적 업데이트에 날짜가 표시되면, 미러링을 올바르게 구성한 것입니다.
정상적으로 작동하지 않는 경우, 빨간색 ‘error’ 태그가 표시되며, 오류 메시지가 텍스트로 표시됩니다.

다른 GitLab 인스턴스에 2FA를 활성화한 푸시 미러 설정

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

관련 주제