Bash를 사용해 전체 GitLab 마이그레이션을 자동화한 방법 (실제 사례 연구 + Scripts)

발행: (2025년 12월 2일 오전 10:59 GMT+9)
6 min read
원문: Dev.to

Source: Dev.to

Git Bash를 사용한 전체 GitLab 마이그레이션 자동화 사례 연구 및 스크립트 커버 이미지

여러 GitLab 인스턴스 간에 리포지토리를 마이그레이션하면 그룹, 서브그룹, CI/CD 파이프라인, 변수, 태그, 이슈 등을 다룰 때 복잡하고 반복적인 작업이 빠르게 증가할 수 있습니다.
이 문제를 효율적으로 해결하기 위해 셀프‑호스팅 GitLab Community Edition에서 GitLab Enterprise (gitlab.com) 로 프로젝트를 마이그레이션하는 데 사용되는 Bash 자동화 스크립트 모음을 개발했습니다. 이 글에서는 접근 방식, 구조, 장점을 요약하고, 전체 툴킷을 커뮤니티에 오픈소스로 제공하고 있습니다.

왜 마이그레이션을 자동화할까?

대규모 환경을 마이그레이션할 때 수작업은 다음과 같은 문제를 야기합니다.

  • ❌ 시간 소모가 큼
  • ❌ 오류 발생 가능성 높음
  • ❌ 추적·반복이 어려움

자동화를 통해 다음을 보장할 수 있습니다.

  • ✔️ 재현 가능
  • ✔️ 감사 가능
  • ✔️ 안전함
  • ✔️ 확장 가능
  • ✔️ 빠름

툴킷에 포함된 내용

스크립트목적
clone-projects.sh소스 GitLab 그룹의 모든 리포지토리를 복제
replace_gitlab-ci.sh새로운 경로에 맞게 .gitlab-ci.yml 참조를 업데이트
push-projects.sh브랜치와 태그를 대상 GitLab 인스턴스로 푸시
migrar-variaveis.shAPI를 통해 그룹 수준 환경 변수를 마이그레이션
migrar_issues.sh메타데이터를 보존하면서 이슈와 댓글을 마이그레이션
delete-issues.sh스테이징/테스트 환경을 초기화할 때 이슈 삭제
gitlab-clone-recursive.sh중첩된 그룹과 서브그룹을 재귀적으로 복제
gitlab-push-recursive.sh리포지토리를 푸시하고 누락된 서브그룹을 자동으로 재생성

각 스크립트에는 다음이 포함됩니다.

  • 검증 로직
  • 로깅
  • 백업 동작
  • 멱등 실행(재실행 안전)

작동 방식 (고수준 워크플로)

  1. 소스 GitLab에서 리포지토리를 복제합니다.
  2. 필요에 따라 CI/CD 경로 교체를 적용합니다.
  3. 리포지토리(브랜치 + 태그)를 대상 인스턴스로 푸시합니다.
  4. 변수, 이슈, 메타데이터를 마이그레이션합니다.
  5. 마이그레이션을 검증하고 최종 완료합니다.

이 흐름은 점진적 마이그레이션을 지원하므로 대규모 환경에서도 유용합니다.

전체 소스 코드

전체 소스 코드는 공개 저장소에 있습니다(간결성을 위해 링크는 생략).

최종 결과

이 자동화를 사용하여 다음을 달성했습니다.

  • ✅ 모든 리포지토리의 완전한 마이그레이션
  • ✅ 히스토리, 브랜치, 태그 보존
  • ✅ 최소한의 수작업으로 CI/CD 파이프라인 재사용
  • ✅ 통제되고 재현 가능한 프로세스

마무리 메모

이 프로젝트는 실제 GitLab 마이그레이션 과정에서 리포지토리, CI/CD 파일, 변수, 브랜치, 태그, 이슈를 구조적이고 안전하게 다루는 명확하고 완전한 자동화 가이드가 부족하다는 점을 깨닫고 시작되었습니다.

첫 번째 버전은 Linux 자동화와 셸 스크립팅에 대한 강력한 배경지식 덕분에 Bash로 구현했으며, 빠른 개발과 신뢰성 있는 마이그레이션을 가능하게 했습니다. 장기 목표는 솔루션을 Python으로 리팩터링하여 향후 확장·유지보수가 더 쉽고 모듈화된 형태로 만드는 것입니다.

기여, 기능 개선, 혹은 Python 재작성에 관심이 있다면 언제든 참여해 주세요—협업을 환영합니다.

이 프로젝트가 여러분의 시간을 절약하거나 더 나은 접근 방식을 제시했으며, 조금이라도 도움이 되었다면 공개한 보람이 있습니다. 함께라면 DevOps 커뮤니티가 더욱 강해집니다. 🚀

GitLab 마이그레이션을 계획하거나 진행 중이라면 자유롭게 포크하고, 적용하고, 개선 사항을 기여해 주세요.

피드백 및 협업을 언제든 환영합니다!

Back to Blog

관련 글

더 보기 »

계정 전환

@blink_c5eb0afe3975https://dev.to/blink_c5eb0afe3975 여러분도 알다시피 저는 다시 제 진행 상황을 기록하기 시작했으니, 이것을 다른…