원격 리포지터리에서 가져오기
- 13.9에서 GitLab Premium으로 이전되었습니다.
GitLab 인터페이스를 사용하여 리포지터리의 내용과 활동을 탐색할 수 있습니다. 해당 리포지터리가 GitLab에 호스팅되지 않더라도 회사 리포지터리(hosted on GitLab이 아닌 경우, 자신의 리포지터리로 브랜치, 태그 및 커밋을 복사하기 위해 풀 mirror를 생성할 수 있습니다.
Push mirrors와 달리, 풀 미러는 일정된 주기로 상위(원격) 리포지터리에서 변경 사항을 가져옵니다. 풀 미러(다운스트림 미러)에 직접 커밋을 푸시하지 않고, 대신 상위 리포지터리에 커밋을 푸시하여 상위 리포지터리와 미러가 갈라지는 것을 방지할 수 있습니다. 원격 리포지터리의 변경 사항은 GitLab 리포지터리로 가져옵니다:
- 이전 풀로부터 30분 후에 자동으로. 이 기능은 비활성화할 수 없습니다.
- 관리자가 미러를 강제 업데이트할 때
- API 호출에 의해 업데이트가 트리거될 때.
UI 및 API 업데이트는 기본 풀 미러링 간격을 기준으로 합니다. 이 간격은 Self-Managed형 인스턴스에서 구성할 수 있습니다.
기본적으로, 다운스트림 풀 미러의 어떤 브랜치나 태그가 로컬 리포지터리와 달라지면, GitLab은 해당 브랜치의 업데이트를 중단합니다. 이로써 데이터 손실을 방지합니다. 상위 리포지터리에서 삭제된 브랜치와 태그는 다운스트림 리포지터리에 반영되지 않습니다.
풀 미러링 작동 방식
GitLab 리포지터리를 풀 미러로 구성한 후:
- GitLab은 해당 리포지터리를 대기열에 추가합니다.
- 매 분마다 Sidekiq cron 작업이 사용 가능한 용량을 기반으로 리포지터리 미러의 업데이트 스케줄을 만듭니다. 이는:
- Sidekiq 설정에 따라 결정된 가능한 용량입니다. GitLab.com의 경우 GitLab.com Sidekiq 설정을 참조하세요.
- 대기열에 이미 존재하고 업데이트 예정인 미러의 수에 따라 달라집니다. 예정 여부는 미러가 마지막으로 업데이트된 시간 및 업데이트가 몇 번 재시도되었느냐에 따라 결정됩니다.
- Sidekiq이 사용 가능해지면 업데이트가 처리됩니다. 업데이트 프로세스:
- 성공할 경우: 최소 30분을 기다린 뒤 다시 업데이트가 예약됩니다.
- 실패할 경우: 나중에 다시 시도됩니다. 14번의 실패 후에 미러는 강한 실패로 표시되어 더 이상 업데이트 대기열에 들어가지 않습니다. 브랜치가 상위 브랜치와 달라지면 실패할 수 있습니다. 브랜치가 달라지는 것을 방지하려면 미러를 생성할 때 달라진 브랜치 덮어쓰기를 구성하세요.
풀 미러링 구성
전제 조건:
- 원격 리포지터리가 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
을 사용하세요. - 미러 방향에서 풀을 선택합니다.
- 인증 방법에서 인증 방법을 선택합니다. 자세한 내용은 미러를 위한 인증 방법을 참조하세요.
- 필요한 옵션을 선택합니다:
- 달라진 브랜치 덮어쓰기
- 미러 업데이트에 대해 파이프라인 트리거하기
- 보호된 브랜치만 미러
- 구성을 저장하려면 리포지터리 미러링을 선택합니다.
달라진 브랜치 덮어쓰기
- 13.9에서 GitLab Premium으로 이전되었습니다.
원격 버전과 달라진 브랜치를 항상 로컬 브랜치와 업데이트하려면, 미러를 생성할 때 달라진 브랜치 덮어쓰기를 선택하세요.
미러 업데이트에 대해 파이프라인 트리거하기
- 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