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

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

GitLab 인터페이스를 사용하여 GitLab에 호스팅되지 않은 리포지터리의 내용과 활동을 검색할 수 있습니다. 풀 mirror를 만들어 상위 리포지터리의 브랜치, 태그 및 커밋을 여러분의 리포지터리로 복사할 수 있습니다.

푸시 mirror와 달리, 풀 mirror는 상위(원격) 리포지터리에서 변경 사항을 일정한 주기로 가져옵니다. 이를 위해 아래의 내용을 주 문입니다. 다운스트림 미러에 커밋을 직접 푸시하지 마세요. 대신 상위 리포지터리에 커밋을 푸시하세요. 원격 리포지터리의 변경 사항은 다음과 같이 GitLab 리포지터리에 풀리게 됩니다:

UI 및 API 업데이트는 기본적으로 5분 풀 미러링 간격에 따라 진행됩니다. 이 간격은 Self-managed 인스턴스에서 구성할 수 있습니다.

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

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

풀 미러링 작동 방법

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

  1. GitLab은 리포지터리를 대기열에 추가합니다.
  2. 매 분마다 Sidekiq cron 작업이 리포지터리 미러를 업데이트할 예정을 영입합니다:
    • Sidekiq 설정에 따라 결정된 가능한 용량. GitLab.com의 경우, GitLab.com Sidekiq 설정을 참조하세요.
    • 대기열에 이미 있는 미러의 개수 및 업데이트 예정 여부에 따라 결정됩니다. 예정 여부는 미러가 마지막으로 업데이트된 시간 및 업데이트 재시도 횟수에 따릅니다.
  3. Sidekiq은 업데이트를 처리하기 위해 사용 가능해집니다. 미러가 업데이트되면:
    • 성공: 30분 이상 대기하도록 업데이트가 다시 대기열에 추가됩니다.
    • 실패: 업데이트가 나중에 다시 시도됩니다. 14번의 실패 이후, 미러는 강력한 실패로 표시되며 더 이상 업데이트 대기열에 추가되지 않습니다. 브랜치가 상위 브랜치와 다르게 되면 실패가 발생할 수 있습니다. 브랜치가 다르게 되는 것을 방지하려면 미러를 만들 때 Overwrite diverged branches를 구성하세요.

풀 미러링 구성하기

전제 조건:

  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. 구성을 저장하려면 리포지터리 미러링을 선택하세요.

Overwrite diverged branches

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

원격 버전과 다를 경우에도 로컬 브랜치를 항상 업데이트하려면 미러를 만들 때 Overwrite diverged branches를 선택하세요.

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

미러 업데이트에서 파이프라인 트리거

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

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

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

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

풀 mirror는 추적을 사용하여 위로 새로운 브랜치 및 커밋이 추가된 후 몇 분 후에 업데이트를 인출합니다. GitLab에 API 호출을 사용하여 알릴 수 있지만, 풀 미러링 제한의 최소 간격은 여전히 적용됩니다.

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

미러링 중 하드 실패 수정

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

연속 14번의 실패 후, 미러링 프로세스는 강력한 실패로 표시되고 미러링 시도가 중지됩니다. 이 실패는 다음에서 확인할 수 있습니다:

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

프로젝트 미러링을 재개하려면 강제로 업데이트를 실행하세요.

많은 프로젝트가 이 문제에 영향을 받는 경우, 긴 네트워크 또는 서버 중단 후에, 다음 명령어로 영향을 받는 모든 프로젝트를 식별하고 업데이트할 수 있습니다.:

Project.find_each do |p|
  if p.import_state && p.import_state.retry_count >= 14
    puts "Resetting mirroring operation for #{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

관련 주제