원격 리포지터리에서 가져오기

Tier: Premium, Ultimate Offering: GitLab.com, Self-Managed, GitLab Dedicated
  • 13.9에서 GitLab Premium으로 이전되었습니다.

GitLab 인터페이스를 사용하여 리포지터리의 내용과 활동을 탐색할 수 있습니다. 해당 리포지터리가 GitLab에 호스팅되지 않더라도 회사 리포지터리(hosted on GitLab이 아닌 경우, 자신의 리포지터리로 브랜치, 태그 및 커밋을 복사하기 위해 풀 mirror를 생성할 수 있습니다.

Push mirrors와 달리, 풀 미러는 일정된 주기로 상위(원격) 리포지터리에서 변경 사항을 가져옵니다. 풀 미러(다운스트림 미러)에 직접 커밋을 푸시하지 않고, 대신 상위 리포지터리에 커밋을 푸시하여 상위 리포지터리와 미러가 갈라지는 것을 방지할 수 있습니다. 원격 리포지터리의 변경 사항은 GitLab 리포지터리로 가져옵니다:

UI 및 API 업데이트는 기본 풀 미러링 간격을 기준으로 합니다. 이 간격은 Self-Managed형 인스턴스에서 구성할 수 있습니다.

기본적으로, 다운스트림 풀 미러의 어떤 브랜치나 태그가 로컬 리포지터리와 달라지면, GitLab은 해당 브랜치의 업데이트를 중단합니다. 이로써 데이터 손실을 방지합니다. 상위 리포지터리에서 삭제된 브랜치와 태그는 다운스트림 리포지터리에 반영되지 않습니다.

note
다운스트림 풀 미러 리포지터리에서 삭제된 항목은 여전히 상위 리포지터리에 있는 경우 다음 풀 후에 복원됩니다. 예: 미러링된 리포지터리에서만 삭제된 브랜치는 다음 풀 후에 다시 나타납니다.

풀 미러링 작동 방식

GitLab 리포지터리를 풀 미러로 구성한 후:

  1. GitLab은 해당 리포지터리를 대기열에 추가합니다.
  2. 매 분마다 Sidekiq cron 작업이 사용 가능한 용량을 기반으로 리포지터리 미러의 업데이트 스케줄을 만듭니다. 이는:
    • Sidekiq 설정에 따라 결정된 가능한 용량입니다. GitLab.com의 경우 GitLab.com Sidekiq 설정을 참조하세요.
    • 대기열에 이미 존재하고 업데이트 예정인 미러의 수에 따라 달라집니다. 예정 여부는 미러가 마지막으로 업데이트된 시간 및 업데이트가 몇 번 재시도되었느냐에 따라 결정됩니다.
  3. Sidekiq이 사용 가능해지면 업데이트가 처리됩니다. 업데이트 프로세스:
    • 성공할 경우: 최소 30분을 기다린 뒤 다시 업데이트가 예약됩니다.
    • 실패할 경우: 나중에 다시 시도됩니다. 14번의 실패 후에 미러는 강한 실패로 표시되어 더 이상 업데이트 대기열에 들어가지 않습니다. 브랜치가 상위 브랜치와 달라지면 실패할 수 있습니다. 브랜치가 달라지는 것을 방지하려면 미러를 생성할 때 달라진 브랜치 덮어쓰기를 구성하세요.

풀 미러링 구성

전제 조건:

  1. 왼쪽 사이드바에서 검색 또는 이동을 선택하고 프로젝트를 찾습니다.
  2. 설정 > 리포지터리를 선택합니다.
  3. 리포지터리 미러링을 확장합니다.
  4. Git 리포지터리 URL을 입력합니다.

    note
    gitlab 리포지터리를 미러링하려면, gitlab.com:gitlab-org/gitlab.git 또는 https://gitlab.com/gitlab-org/gitlab.git을 사용하세요.
  5. 미러 방향에서 을 선택합니다.
  6. 인증 방법에서 인증 방법을 선택합니다. 자세한 내용은 미러를 위한 인증 방법을 참조하세요.
  7. 필요한 옵션을 선택합니다:
  8. 구성을 저장하려면 리포지터리 미러링을 선택합니다.

달라진 브랜치 덮어쓰기

  • 13.9에서 GitLab Premium으로 이전되었습니다.

원격 버전과 달라진 브랜치를 항상 로컬 브랜치와 업데이트하려면, 미러를 생성할 때 달라진 브랜치 덮어쓰기를 선택하세요.

caution
이 옵션을 활성화하면 미러링된 브랜치에 대한 로컬 변경 사항이 손실됩니다.

미러 업데이트에 대해 파이프라인 트리거하기

  • 13.9에서 GitLab Premium으로 이전되었습니다.

이 옵션이 활성화된 경우, 브랜치나 태그가 원격 리포지터리에서 업데이트될 때 파이프라인이 트리거됩니다. 원격 리포지터리의 활동에 따라 CI 러너의 부하가 크게 증가할 수 있습니다. 부하를 처리할 수 있는 경우에만 이 기능을 활성화하세요. CI는 풀 미러링을 설정할 때 할당된 자격 증명을 사용합니다.

API를 사용하여 업데이트 트리거하기

  • 13.9에서 GitLab Premium으로 이전되었습니다.

풀 미러링은 폴링을 사용하여 원격 상위 리포지터리에 추가된 새 브랜치 및 커밋을 감지하며, 이후 수 분 내에 이를 가져옵니다. 그러나 API 호출을 사용하여 GitLab에 알릴 수 있지만, 여전히 풀 미러링 제한 최소 간격이 적용됩니다.

자세한 내용은 프로젝트를 위한 풀 미러링 프로세스 시작을 참조하세요.

미러링 시간에 강한 실패 해결

  • 13.9에서 GitLab Premium으로 이전되었습니다.

연속 14번의 실패 후에 미러링 프로세스는 강한 실패로 표시되고 미러링 시도가 중단됩니다. 이 실패는 다음 위치에서 볼 수 있습니다:

  • 프로젝트의 주요 대시보드.
  • 풀 미러 설정 페이지.

프로젝트 미러링을 다시 시작하려면, 강제로 업데이트하세요.

네트워크 또는 서버 장애 후와 같이 많은 프로젝트에 영향을 미치는 경우, 다음 명령을 사용하여 영향을 받는 모든 프로젝트를 식별 및 업데이트할 수 있습니다:

Project.find_each do |p|
  if p.import_state && p.import_state.retry_count >= 14
    puts "#{p.full_path}에 대한 미러링 작업 재설정 중"
    p.import_state.reset_retry_count
    p.import_state.set_next_execution_to_now(prioritized: true)
    p.import_state.save!
  end
end

관련 주제