원격 리포지터리에서 풀 가져오기
- 13.9에서 GitLab Premium으로 이전되었습니다.
GitLab 인터페이스를 사용하여 GitLab에 호스팅되지 않은 리포지터리의 내용과 활동을 검색할 수 있습니다. 풀 mirror를 만들어 상위 리포지터리의 브랜치, 태그 및 커밋을 여러분의 리포지터리로 복사할 수 있습니다.
푸시 mirror와 달리, 풀 mirror는 상위(원격) 리포지터리에서 변경 사항을 일정한 주기로 가져옵니다. 이를 위해 아래의 내용을 주 문입니다. 다운스트림 미러에 커밋을 직접 푸시하지 마세요. 대신 상위 리포지터리에 커밋을 푸시하세요. 원격 리포지터리의 변경 사항은 다음과 같이 GitLab 리포지터리에 풀리게 됩니다:
- 이전 풀로부터 30분 후에 자동으로. 이 기능은 비활성화할 수 없습니다.
- 관리자가 mirror를 강제로 업데이트할 때.
- API 호출이 업데이트를 트리거할 때.
UI 및 API 업데이트는 기본적으로 5분 풀 미러링 간격에 따라 진행됩니다. 이 간격은 Self-managed 인스턴스에서 구성할 수 있습니다.
기본적으로, 다운스트림 풀 mirror의 어떤 브랜치나 태그가 로컬 리포지터리와 다를 경우, GitLab은 해당 브랜치를 업데이트하지 않습니다. 이를 통해 데이터 손실을 방지합니다. 상위 리포지터리에서 삭제된 브랜치와 태그는 하위 리포지터리에 반영되지 않습니다.
풀 미러링 작동 방법
GitLab 리포지터리를 풀 mirror로 구성한 후:
- GitLab은 리포지터리를 대기열에 추가합니다.
- 매 분마다 Sidekiq cron 작업이 리포지터리 미러를 업데이트할 예정을 영입합니다:
- Sidekiq 설정에 따라 결정된 가능한 용량. GitLab.com의 경우, GitLab.com Sidekiq 설정을 참조하세요.
- 대기열에 이미 있는 미러의 개수 및 업데이트 예정 여부에 따라 결정됩니다. 예정 여부는 미러가 마지막으로 업데이트된 시간 및 업데이트 재시도 횟수에 따릅니다.
- Sidekiq은 업데이트를 처리하기 위해 사용 가능해집니다. 미러가 업데이트되면:
- 성공: 30분 이상 대기하도록 업데이트가 다시 대기열에 추가됩니다.
- 실패: 업데이트가 나중에 다시 시도됩니다. 14번의 실패 이후, 미러는 강력한 실패로 표시되며 더 이상 업데이트 대기열에 추가되지 않습니다. 브랜치가 상위 브랜치와 다르게 되면 실패가 발생할 수 있습니다. 브랜치가 다르게 되는 것을 방지하려면 미러를 만들 때 Overwrite diverged branches를 구성하세요.
풀 미러링 구성하기
전제 조건:
- 원격 리포지터리가 GitHub에 있고 이중 인증(2FA)이 구성되어 있는 경우,
repo
스코프를 가진 GitHub용 개인 액세스 토큰 을 생성합니다. 2FA가 활성화된 경우, 이 개인 액세스 토큰은 귀하의 GitHub 비밀번호로 작동합니다. - GitLab Silent Mode이 비활성화되어 있어야 합니다.
- 왼쪽 사이드바에서 검색 또는 이동을 선택하여 프로젝트를 찾습니다.
- 설정 > 리포지터리를 선택합니다.
- 리포지터리 미러링을 확장합니다.
-
Git 리포지터리 URL을 입력하세요.
gitlab
리포지터리를 미러링하려면,gitlab.com:gitlab-org/gitlab.git
또는https://gitlab.com/gitlab-org/gitlab.git
을 사용합니다. - 미러 방향에서 풀을 선택하세요.
- 인증 방법에서 귀하의 인증 방법을 선택하세요. 자세한 내용은 미러용 인증 방법을 참조하세요.
- 필요한 옵션을 선택하세요:
- Overwrite diverged branches
- 미러 업데이트에서 파이프라인 트리거
- Only mirror protected branches
- 구성을 저장하려면 리포지터리 미러링을 선택하세요.
Overwrite diverged branches
- 13.9에서 GitLab Premium으로 이전되었습니다.
원격 버전과 다를 경우에도 로컬 브랜치를 항상 업데이트하려면 미러를 만들 때 Overwrite diverged branches를 선택하세요.
미러 업데이트에서 파이프라인 트리거
- 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