직접 전송에 의한 그룹 이전

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

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

설계 결정

다음 아키텍처 다이어그램은 ETL 파이프라인 세트와 현재 GitLab API를 활용하는 그룹 이전 작업 방식을 설명합니다.

간소화된 구성 요약

ETL

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

ETL 아키텍처를 사용하면 코드를 명확하고 따르기 쉽고 테스트하고 확장하기 쉬워집니다. 각 관계에 대해 하나의 ETL 파이프라인이 있도록 하는 것이 아이디어입니다.

API

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

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

그리고, GraphQL로 나아가는 길에 있으므로, 직접 전송에 의한 그룹 이전은 GraphQL API 범위를 확장하는 데 기여할 수 있으며, 이는 GitLab과 사용자 모두에게 이점을 제공합니다.

네임스페이스

이주 프로세스는 이주 추적을 위한 BulkImport 레코드를 생성하여 시작됩니다. 거기서 GitLab 그룹 이전과 관련된 모든 코드는 모든 응용프로그램 계층에서 새로운 BulkImports 네임스페이스 아래에서 찾을 수 있습니다.

Idempotency

동일한 Sidekiq 작업을 다시 실행할 때 중복 항목이 발생하지 않도록 하기 위해 각 항목을 처리하는 대로 캐시하고 캐시에 이미 존재하는 항목은 건너뜁니다.

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

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