그룹과 프로젝트를 직접 전송으로 마이그레이션 하면, UI 또는 API를 사용하여 GitLab 인스턴스 간에 GitLab 리소스를 쉽게 이전할 수 있습니다. 이전 블로그 게시물에서 GitLab은 모든 사람이 사용할 수 있는 베타 기능으로 프로젝트 마이그레이션을 발표했습니다. 아울러 이 방법의 이점과 마이그레이션 단계도 설명했습니다.
이후 GitLab은 특히 대규모 프로젝트의 효율적이고 안정적인 마이그레이션에 초점을 맞추어 추가 개선 작업을 진행하였습니다. 이 글에서는 이러한 개선 사항과 전반적인 프로세스, 마이그레이션 속도에 미치는 영향을 자세히 설명하려고 합니다. 또한 마이그레이션 시간 추정치도 다루겠습니다.
CI/CD 파이프라인 가져오기
Timeout 문제
GitLab은 CI/CD 파이프라인의 가져오기가 Timeout으로 실패하는 버그 보고를 받았고, 기본 마이그레이션 프로세스를 개선할 필요가 있다고 판단했습니다. 이에 문제의 근본 원인과 가능한 해결책을 고려하고 PoC(Proof of Concept)를 진행했습니다. 그리고 GitLab은 ‘특정 관계 유형(예: 파이프라인)의 대량 프로젝트에 대한 하나의 거대 아카이브 파일 문제를 해결해야 한다’라고 결론 내렸습니다.
개선 사항
Timeout 문제를 해결하기 위해, 관계(예: Merge Request(MR) 또는 파이프라인)를 내보내고 가져오는 과정에 배치(Batch)를 도입하기로 결정했습니다.
그리고 배치 도입을 위한 에픽을 완전히 완료하기 전에, CI/CD 파이프라인을 내보내는 과정에 몇 가지 다른 최적화를 도입해야 했습니다.
GitLab 15.10에서는:
이러한 최적화로 인해 CI/CD 파이프라인의 내보내기 속도가 크게 빨라졌습니다. 이에 따라 프로젝트의 대량 파이프라인을 아카이브 파일로 내보낼 수 있었고 그 다음, 목적지 인스턴스에도 가져올 수 있었습니다. 하지만 파이프라인을 최종적으로 가져왔기 때문에 마이그레이션의 전체 시간은 증가했습니다.
GitLab 16.3에서는 배치로 관계를 내보내고 가져오기 기능을 도입했습니다. 이는 두 가지 이점이 있습니다:
- 한 번의 관계 당 하나의 파일 대신 더 작은 아카이브 파일을 만들고 전송하여 마이그레이션 성능을 향상합니다. 프로젝트에 수천 개의 파이프라인이 있으면 이러한 파일은 매우 클 수 있습니다.
- 더 많은 병렬 처리를 가능하게 합니다. 예를 들어, CI 파이프라인 데이터는 이제 여러 배치로 나누어지며, 동시 Sidekiq job(목적지 인스턴스에서 Sidekiq Worker를 사용할 수 있을 때, 아래 참조)이 각 배치를 가져옵니다.
이 개선 사항은 GitLab.com에서 이미 기본으로 사용할 수 있습니다.
- 자체 관리형 GitLab 인스턴스에서 GitLab.com으로 마이그레이션 하는 사용자는 배치 내보내기를 사용할 수 있는 GitLab 16.2 이상 버전에 자체 관리형 인스턴스가 있어야 이 개선 사항의 이점을 누릴 수 있습니다.
- GitLab.com에서 자체 관리형 GitLab 인스턴스로 마이그레이션 하는 사용자는 GitLab 16.2 이상 버전에 자체 관리형 인스턴스가 있어야 하고,
bulk_imports_batched_import_export
기능 플래그(Feature Flag)를 활성화해야 이 개선 사항의 이점을 활용할 수 있습니다.