직접 전송에 의한 그룹 이전

note
직접 전송을 사용하려면 GitLab 설치가 GitLab IP 주소에서 접근 가능하고 공개 DNS 항목이 있어야 합니다.

직접 전송에 의한 그룹 이전은 파일 내보내기를 사용하여 그룹 및 프로젝트를 이관하는 방식의 진화입니다. 이 기능의 목표는 사용자가 한 GitLab 인스턴스에서 다른 인스턴스로 전체 그룹(프로젝트 포함)을 쉽게 이관할 수 있는 방법을 제공하는 것입니다.

설계 결정

다음 아키텍처 다이어그램은 ETL 파이프라인에 의존하는 그룹 이전 작업이 현재 GitLab API를 활용하는 방식을 보여줍니다.

간소화된 구성 요약

ETL

추출, 변환, 로드(ETL)는 여러 데이터 원본에서 데이터를 가져와 단일하고 일관된 데이터 리포지터리에 로드하는 데이터 통합 프로세스로, 해당 리포지터리는 데이터 웨어하우스 또는 다른 대상 시스템으로 로드됩니다.

ETL 아키텍처를 사용하면 코드가 명확해지고 추적 및 확장이 쉬워집니다. 아이디어는 각 관계에 대해 하나의 ETL 파이프라인을 보유하는 것입니다.

API

현재 프로젝트그룹 이전은 파일 기반이므로 이러한 이전은 내보내기 단계가 필요합니다.

직접 전송에 의한 그룹 이전은 GitLab API를 활용하여 이관 속도를 높입니다.

그리고 GraphQL의 길로 나아가고 있기 때문에, 직접 전송에 의한 그룹 이전은 GraphQL API 범위를 확대하는 데 기여할 수 있으며, 이는 GitLab 및 사용자 모두에게 이점이 됩니다.

네임스페이스

이전 프로세스는 이전 추적을 유지하기 위해 BulkImport 레코드를 생성하는 것으로 시작합니다. 이후 GitLab 그룹 이전에 관련된 모든 코드는 새 BulkImports 네임스페이스 아래의 모든 애플리케이션 레이어에서 찾을 수 있습니다.

아이덤포턴시

동일한 Sidekiq 작업을 다시 실행할 때 중복 항목이 생성되지 않도록 각 항목이 처리될 때마다 캐시하고, 캐시에 이미 존재하는 경우 항목을 건너뛸 수 있도록 합니다.

두 가지 다른 전략이 있습니다.

  • BulkImports::Pipeline::HexdigestCacheStrategy는 데이터의 해시 표현을 캐시합니다.
  • BulkImports::Pipeline::IndexCacheStrategy는 파이프라인에서 항목의 마지막 처리 인덱스를 캐시합니다.