직접 이관에 의한 그룹 이관

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

직접 이관에 의한 그룹 이관은 파일 내보내기를 사용하여 그룹 및 프로젝트를 마이그레이션하는 것의 진화입니다. 그 목표는 사용자가 한 GitLab 인스턴스에서 다른 인스턴스로 전체 그룹과 프로젝트를 쉽게 마이그레이션할 수 있는 방법을 갖는 것입니다.

설계 결정

다음 구조도는 ETL 파이프라인 세트를 활용하여 현재 GitLab API에서 작동하는 그룹 마이그레이션의 작동 방식을 보여줍니다.

간소화된 구성 요약

ETL

추출, 변환 및 로드(ETL)는 여러 데이터 소스에서 데이터를 결합하여 단일 일관된 데이터 저장소에로드되는 데이터 통합 프로세스입니다. 이 저장소는 데이터 웨어하우스 또는 다른 대상 시스템에로드됩니다.

ETL 아키텍처를 사용하면 코드를 명확하게하고 따르고 확장하기 쉽도록 만듭니다. 각 관계에 대해 하나의 ETL 파이프라인을 갖는 것이 아이디어입니다.

API

현재 프로젝트그룹 가져오기는 파일 기반이므로 수출 단계를 필요로합니다.

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

또한 GraphQL로 나아가고 있기 때문에 직접 이관을 통해 GraphQL API 범위를 확대할 수 있으며, 이것은 GitLab 및 사용자 양쪽에 이점을 제공할 수 있습니다.

네임스페이스

마이그레이션 프로세스는 마이그레이션을 추적하기 위한 BulkImport 레코드의 생성으로 시작됩니다. 거기서 GitLab 그룹 마이그레이션과 관련된 모든 코드는 응용 프로그램 모든 레이어에서 BulkImports 네임 스페이스 하위에서 찾을 수 있습니다.

Idempotency

같은 Sidekiq 작업을 다시 실행할 때 중복 항목이 생성되지 않도록하려면 각 항목을 처리할 때 캐시하고 캐시에 이미 있는 경우 항목을 건너 뜁니다.

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

  • BulkImports::Pipeline::HexdigestCacheStrategy는 데이터의 16진수 표현을 캐시합니다.
  • BulkImports::Pipeline::IndexCacheStrategy는 파이프라인에서 항목의 마지막 처리된 색인을 캐시합니다.