직접 전송을 통한 그룹 마이그레이션
직접 전송을 통한 그룹 마이그레이션의 아키텍처, ETL 파이프라인 설계, 사용자 기여 매핑 등 주요 구성 요소를 설명합니다.
직접 전송을 사용하려면 GitLab 설치가 GitLab IP 주소 에서 접근 가능하고 공개 DNS 항목이 있어야 합니다. 직접 전송 은 파일 내보내기를 사용한 그룹 및 프로젝트 마이그레이션의 발전된 형태입니다. 목표는 사용자가 프로젝트를 포함한 전체 그룹을 하나의 GitLab 인스턴스에서 다른 인스턴스로 더 쉽게 마이그레이션할 수 있도록 하는 것입니다. 직접 전송에 새 관계나 파이프라인을 추가하려면 직접 전송 임포터에 새 관계 추가 를 참조하세요. 오프라인 전송 은 소스 인스턴스와 대상 인스턴스가 네트워크를 통해 서로 연결할 수 없는 경우를 위한 직접 전송의 변형입니다. 용어 # 이 페이지 전반에서 다음 용어가 반복해서 사용됩니다: 용어 설명 Source instance 마이그레이션 대상 그룹 또는 프로젝트를 소유한 GitLab 인스턴스. Destination instance 그룹 또는 프로젝트가 마이그레이션되어 들어가는 GitLab 인스턴스. BulkImport 하나의 마이그레이션 요청으로, BulkImport 레코드로 추적됩니다. 하나의 요청이 여러 최상위 그룹 또는 프로젝트를 포함할 수 있습니다. Entity 마이그레이션이 예약된 단일 그룹 또는 프로젝트로, BulkImports::Entity 레코드로 추적됩니다. Portable 파이프라인이 임포트하는 관계를 소유한 대상 그룹 또는 프로젝트 레코드(entity.group 또는 entity.project). Relation 마이그레이션되는 데이터의 한 유형(예: issues 또는 labels)으로, import_export.yml에 정의되며 일반적으로 하나의 파이프라인이 처리합니다. Tracker 하나의 엔티티에 대해 하나의 파이프라인 진행 상황을 추적하는 BulkImports::Tracker 레코드. 대부분의 직접 전송 코드는 BulkImports 모듈에 있으며 점진적으로 Import 모듈로 이전되고 있습니다. 직접 전송은 Gitlab::ImportExport 모듈에도 의존합니다. 설계 결정 # 직접 전송은 관계마다 하나의 파이프라인을 실행하여 각 관계를 소스 인스턴스 에서 추출하고 대상 데이터베이스에 적재합니다. 파이프라인은 별도의 Sidekiq job으로 실행되므로 서로 독립적인 파이프라인은 병렬로 실행됩니다. 다만 일부 파이프라인은 다른 파이프라인이 먼저 임포트되어 있어야 하므로, 파이프라인은 스테이지 로 구성되며 앞선 스테이지의 모든 파이프라인이 완료된 후에만 시작됩니다. 최초 요청부터 각 파이프라인 실행까지 마이그레이션을 구동하는 Sidekiq 워커들이 서로를 어떻게 호출하는지는 Sidekiq job 실행 계층 구조 를 참조하세요. Pipelines # 파이프라인은 ETL (추출, 변환, 적재) 아키텍처를 사용하며, 이를 통해 코드가 더 명확해지고 추적, 테스트, 확장이 쉬워집니다. 파이프라인 클래스는 어떤 extractor, transformer, loader를 사용하는지만 선언합니다. 추출-변환-적재 루프 자체는 구현하지 않으므로 해당 루프는 한 곳에만 존재하면 됩니다