지난 9월 12일 서울 위워크 삼성점에서 GitLab 코리아 17번째 밋업이 오프라인으로 진행됐습니다. 이날 행사는 코로나19에 따른 ‘사회적 거리 두기’ 해제 조치 이후 ‘인포그랩과 GitLab 코리아의 첫 오프라인 밋업’이라는 의미가 있었죠. 밋업 주제는 **‘효율성과 생산성 높이는 GitLab 마이그레이션’**이었습니다. 밋업은 두 개의 세션으로 진행됐는데요. 세션 1에서는 유인철 GitLab 코리아 이사가 **‘GitLab 마이그레이션으로 얻는 유익’**을 주제로 발표했고요. 세션 2에서는 인포그랩 DevOps 팀에서 **‘Jira, GitLab으로 쉽게 마이그레이션 하기’**를 주제로 발표와 시연을 선보였죠. 이 글에서는 이날 밋업의 주요 발표 내용을 살펴보겠습니다.
GitLab의 주요 마이그레이션 기능 이모저모
세션 1에서는 GitLab의 주요 마이그레이션 기능과 GitLab 마이그레이션의 성공 사례를 다뤘는데요. 유인철 GitLab 코리아 이사는 GitLab의 마이그레이션 기능을 1)Self-managed(자체 관리형)에서 SaaS로, 2)GitHub 또는 Bitbucket 또는 Jira에서 GitLab으로, 3)기타 도구에서 GitLab으로 마이그레이션 하는 기능 이렇게 3가지로 나눠 소개했습니다. 특히 각 기능이 필요한 상황과 고려할 점, 준비사항, 마이그레이션 될 내용, 마이그레이션 방법 등을 자세히 알아봤어요.
1.Self-managed → SaaS
마이그레이션 방법 | 내용 |
---|---|
Project Export/Import | GUI 기반으로 이관 |
Group Export/Import | 그룹 구성 정보만 주고받을 수 있음 |
Direct Transfer | 별도 파일을 이동하지 않고 그룹, 서브그룹, 프로젝트를 GitLab.com에 전송 |
유 이사는 Self-managed에서 SaaS로 마이그레이션 해야 하는 상황을 이렇게 설명했습니다. 1)GitLab 인스턴스를 관리하는 데 부담을 느낄 때, 2)매달 새로운 기능을 적용하는 업그레이드가 부담될 때, 3)공유 러너(Runner)를 최대한 활용해서 서버를 효율적으로 이용할 때, 4)고가용성이 필요할 때, 5)더 안정적인 개발 환경이 필요할 때, 6)전 세계 어디서든 바로 작업할 수 있는 개발 환경이 필요할 때이죠.
그러나 Self-managed에서 SaaS로 마이그레이션 하기에 앞서 미리 고려할 점이 있다고 해요. 첫째, Self-managed와 SaaS 간 기능 차이를 알아야 합니다. 일례로 맞춤형 git hooks는 지원되지 않고요. push rules를 사용해야 한다고 합니다. 둘째, 프로젝트 사 이즈도 검토해야 하죠. 5GB 이하로 프로젝트 사이즈를 줄여야 합니다. 셋째, 러너 사용 전략을 고민해야 해요. GitLab에서는 공유 러너를 이용한 모든 job 시간의 합계를 ‘컴퓨터 할당량’이라고 하는데요. 이를 최대한 활용해야 합니다. 참고로 한 달 동안 사용할 수 있는 공유 러너 시간에는 제한이 있습니다.
이어서 유 이사는 Self-managed에서 SaaS로 마이그레이션 하는 방법 두 가지를 소개하고, 장단점을 각각 짚었습니다. 첫째, Project Export/Import 기능인데요. 이 기능을 사용하면 GUI(그래픽 사용자 인터페이스) 기반으로 이관할 수 있습니다. 내보내는(export) 파일이 5GB 이하면 쉽게 진행할 수 있죠. 그러나 5GB가 넘는 프로젝트에는 제약이 있고요. 동일한 사용자를 미리 만들어야 합니다.
둘째, Direct Transfer 기능인데요. 이 기능은 GitLab 15.6 버전부터 본격적으로 지원되고 있습니다. Direct Transfer 기능을 사용하면 별도 파일을 이동하지 않고도 그룹, 서브그룹, 프로젝트를 GitLab.com에 전송할 수 있는데요. ‘프로젝트까지 전송할지’ 여부도 선택할 수 있죠. 기능은 계속 업데이트되고 있고요. 일부 기능은 베타 단계이지만 정상적으로 동작합니다.
2.GitHub → GitLab
사전 준비 사항 |
---|
1.GitLab에서 Maintainer 권한이 있는 사용자가 수행 |
2.프로젝트에 있는 GitHub 계정은 외부 연결 메일 계정이 있어서 GitLab과 매핑 가능 |
3.사용자 매핑 위해 GitHub의 이메일 주소가 GitLab에도 있어야 함 |
4.GitLab에서 import source로 GitHub이 활성화돼야 함 |
GitLab은 GitHub에서 GitLab으로 마이그레이션 하는 기능을 지원하고 있죠. 지난 8월 인포그랩 기술 블로그에서도 이를 자세히 소개했습니다. GitHub에서 GitLab으로 마이그레이션 할 때, Repository description(리포지터리 설명), Git repository data(Git 리포지터리 데이터), Branch protection rules(브랜치 보호 규칙), Collaborator(협업자), Issue, Pull request 등을 마이그레이션 할 수 있는데요. 이 밖에도 수많은 데이터를 마이그레이션 할 수 있죠. 앞서 언급한 인포그랩 기술 블로그에서 이 내용을 자세히 확인할 수 있습니다.
유 이사는 GitHub에서 GitLab으로 마이그레이션 할 때 사전 준비 사항으로 다음 내용을 제언했는데요. 첫째, GitLab에서 Maintainer 권한이 있는 사용자가 수행해야 합니다. 둘째, 프로젝트에 있는 GitHub 계정은 외부 연결 메일 계정이 있어서 GitLab과 매핑할 수 있죠. 셋째, 사용자 매핑을 위해 GitHub의 이메일 주소가 GitLab에도 있어야 합니다. 넷째, GitLab에서 import source로 GitHub이 활성화돼야 하는데요. 이는 Self-managed 사용자에게 적용되는 내용입니다.
GitHub Action에서 GitLab CI로 마이그레이션 할 수도 있죠. 이는 수동으로 진행해야 하지만 작업하기 쉽다고 하는데요. 첫번째, 마이그레이션 한 뒤에 .github/workflows
폴더를 보면 lint.yml
, smoke.yml
, unit.yml
이렇게 Action 파일 3개를 볼 수 있습니다. 두번째, import 된 프로젝트로 가서 WebIDE를 수행하고요. 세번째, 프로젝트 root에 .gitlab-ci.yml
파일을 생성합니다. 넷째, 앞서 언급한 Action 파일 3개의 주요 job 내용을 수동으로 복사해서 구성하고요.
3.Bitbucket 등 기타 도구 → GitLab
사전 준비 사항 |
---|
1.GitLab에서 Maintainer 권한이 있는 사용자가 수행 |
2.GitLab에서 import source로 Bitbucket이 활성화돼야 함 |
GitLab은 Bitbucket에서 GitLab으로 마이그레이션 하는 기능도 지원합니다. 마이그레이션 되는 데이터와 마이그레이션 되지 않는 데이터를 잘 구분해야 하는데요. 유 이사는 각 데이터를 다음과 같이 설명했습니다. 마이그레이션 할 수 있는 데이터는 Repository description, Git repository data, Pull request, Pull request comments입니다. 그러나 Pull request approval과 Attachments in Markdown, Task list, Emoji reaction은 마이그레이션 할 수 없고요.
Bitbucket에서 GitLab으로 마이그레이션 할 때는 다음 사항을 미리 준비해야 한다고 하죠. GitLab에서 Maintainer 권한이 있는 사용자가 수행해야 합니다. 또 GitLab에서 import source로 Bitbucket이 활성화돼야 하는데요. 이는 Self-managed 사용자에게 적용되는 내용입니다. 이밖에 유 이사는 GitLab으로 마이그레이션 할 수 있는 플랫폼으로 Bitbucket Cloud, Bitbucket Server, Clear Case, CVS, FogBugz, Gitea, Perforce, TFVC, Jira 등도 소개했습니다.
GitLab 마이그레이션 성공 사례 누가 있나
많은 조직이 GitLab으로 마이그레이션 해 개발 효율성과 생산성을 높이고 있는데요. 유 이사는 국내외에서 GitLab으로 마이그레이션 한 성공 사례를 여러 가지 공유했습니다. 이 글에서는 세 가지 사례를 추렸습니다.
1.B사(Bitbucket → GitLab)
B사는 Bitbucket에서 GitLab으로 마이그레이션 했는데요. 이 회사는 하나의 제품으로 CI/CD까지 수행할 수 있는 환경이 필요했습니다. 아울러 고가용성 또는 재해복구 환경을 구축하는 확장 가능한 솔루션도 원했는데요. B사는 프로젝트 약 100개를 Bitbucket에서 GitLab으로 마이그레이션 했습니다. GitLab에서 제공하는 UI를 사용해 진행했고요. 사용자 계정은 미리 매핑했죠. 이 회사는 GitLab Ultimate 에디션을 사용하고 있는데요. 다양한 보안 검증 스캐너를 활용해 보안 검사를 수행합니다. 올해 업그레이드 과정에서 Geo 서버 간에 불일치가 있었지만 재동기화 기능을 사용해 문제를 해결했고, 정상 작동 중이라고 하죠.
2.Verizon(Jenkins → GitLab CI)
Verizon은 Jenkins에서 GitLab CI로 마이그레이션을 진행했습니다. 이 회사는 마이그레이션에 약 1년을 투자했는데요. 이와 관련해 다음 작업을 수행했습니다. 데이터 마이그레이션과 이관 작업을 진행했고요. 표준 CI/CD 템플릿을 작성했죠. 또 연관된 시스템과 연동 이슈를 검토하고 해결했고요. 자동 스케일 아웃되는 공유 러너를 구축했습니다. 사용자를 교육하고, 전체 프로젝트도 관리했고요.
3.OW2(Jira → GitLab)
OW2는 Jira에서 GitLab으로 마이그레이션 했는데요. 이곳은 Jira 정보를 그대로 유지하도록 별도의 마이그레이션 도구를 개발했습니다. 이로써 이슈 간 연결 관계, 이슈 생성과 업데이트 날짜, 커밋과 이슈 간 연결 관계를 유지했죠. OW2는 오픈 소스 커뮤니티를 위한 비영리 조직인데요. 커뮤니티에서는 GitLab으로 마이그레이션 한 데 긍정적 반응을 보였습니다. 이들은 GitLab의 이슈 추적, 워크플로에 만족하고요. 매일 사용하면서 생산성 향상을 경험한다고 하죠.