안녕하세요. 이음소시어스 개발팀 서버개발자 육승찬(루)입니다.
저희 개발팀에서는 깃랩을 사용하고 있습니다. 이번에 깃랩 버전을 업데이트하게 되었고, 그 과정에서 겪은 경험을 공유하면 좋을 것 같아 “고통과 함께한 GITLAB(깃랩) 업데이트” 주제를 가지고 포스트를 작성하게 되었습니다.
GITLAB ?
Create, review and deploy code together
GITLAB(깃랩)은 설치형 버전관리 시스템입니다. 오픈소스로 제작되었고 꾸준히 업데이트되고 있습니다. 깃랩은 CE(Community Edition), EE(Enterprise Edtion), GitLab.com(On gitlab server) 세 가지 형태로 존재합니다. 저희 개발팀에서는 CE를 사용하고 있기 때문에 CE기준으로 설명드리겠습니다.
UPDATE ?
저희 개발팀에서는 2년 전 깃랩 6.1을 BITNAMI로 설치하여 사용해오고 있었습니다. 현재 깃랩 최신 버전이 7.9.2라는 것을 보고 업데이트가 필요하다고 생각이 들기도 했고, 개인적으로 써보고 싶어서 팀장님께 깃랩 업데이트를 제안 드렸습니다.
팀장님도 좋다고 하셔서 업데이트하기로 했습니다. (이때 고통이 뒤따를지 생각지도 못했습니다)
최근의 깃랩은 gitlabhq와 omnibus-gitlab으로 배포되고 있습니다. gitlabhq를 이용하여 설치하면 DB, REDIS 등 여러 소프트웨어를 직접 설치하고 깃랩에 연결하여 사용했었습니다. 하지만 omnibus-gitlab는 필요한 소프트웨어가 포함되어 패키지 형태로 설치됩니다. 또한, omnibus-gitlab는 기타설정이 매우 쉬우므로 관리하기가 좋습니다.
그래서 개발 서버에 설치된 깃랩 6.1을 omnibus-gitlab으로 업데이트하고자 하였습니다.
HOW ?
- 제가 생각했던 첫 번째 (실패한)방법입니다.
먼저 깃랩 6.1에서 데이터를 백업하고 omnibus-gitlab을 설치하여 데이터를 복구하는 것이었습니다. 깃랩은 데이터 백업과 복구기능을 지원하기 때문에 다음 명령어로 데이터를 백업할 수 있습니다.
1 |
sudo -u git -H bundle exec rake gitlab:backup:create RAILS_ENV=production |
백업이 완료되면 tmp/bakups 안에 [timestamp]_gitlab_backup.tar 형태의 파일이 저장됩니다. 백업이 완료된 후 omnibus-gitlab을 설치합니다. 패키지 형태로 배포되고 있기 때문에 설치가 매우 쉽습니다. 자세한 설치방법은 깃랩 홈페이지에 있습니다.
omnibus-gitlab 설치가 완료되면 /var/opt/gitlab/backups 안에 위에서 백업한 파일을 옮기고 아래 복구 명령어를 실행했습니다.
1 |
sudo -u git -H bundle exec rake gitlab:backup:restore RAILS_ENV=production BACKUP=timestamp_of_backup |
그러면 아래와 같은 에러가 발생합니다.
1 2 3 4 5 |
Unpacking backup ... done GitLab version mismatch: Your current GitLab version (7.9.2) differs from the GitLab version in the backup! Please switch to the following version and try again: version: commit_hash |
그렇습니다.. 깃랩 백업&복구는 버전이 다르면 적용할 수 없습니다.
- 두 번째 (실패한)방법입니다.
깃랩은 버전별로 업데이트하는 가이드를 제공하고 있습니다. 저는 gitlab 6.x or 7.x to 7.9(해당 링크는 계속해서 업데이트 되기 때문에 링크가 깨질 수 있습니다. 만약 링크에서 404에러가 난다면 여기로 접속해보세요.) 업데이트 가이드를 참고했습니다. 가이드에 나와 있는 방법대로 업데이트를 진행하고 있었는데 문제가 하나 발생했습니다. 현재 서버에 설치되어있는 gitlab-shell 프로젝트가 깃 프로젝트가 아니었습니다. 일단 gitlab-shell 프로젝트 관련 내용을 넘기고 나머지 커맨드를 입력하고 있었는데 데이터베이스 마이그레이션 부분에서 gitlab-shell 관련해서 에러가 났습니다.
결국 BITNAMI로 설치 된 깃랩을 업데이트하는 것을 포기했습니다.
- 세 번째 (성공한)방법입니다.
처음 생각했던 것보다 많이 복잡해졌습니다.. 하지만 희망을 가지고 (BITMANI)깃랩 6.1에서 데이터를 백업하고, 임시로 가상 인스턴스를 만들어서 깃랩을 6.1로 설치했습니다. 그리고 앞에서 백업한 파일을 복구하고 버전 업데이트를 진행했습니다. 버전 업데이트는 두 번째 방법에서 참고한 가이드를 똑같이 따라 했습니다. 업데이트는 순조롭게 진행되었고 데이터 백업까지 할수 있었습니다.
그리고 omnibus-gitlab 7.9.2를 설치했고, 깃랩 7.9.2에서 백업한 데이터를 복구하려 했습니다. 하지만 또 다시 에러가 발생했습니다.. 에러 내용은 데이터베이스 관련 에러입니다. 구글에 조금 찾아보니 깃랩을 ommibus-gitlab으로 마이그레이션하는 방법이 있었습니다. 내용을 요약하면 이렇습니다.
omnibus-gitlab에서는 PostgreSQL를 사용합니다. 만약 이전에 MySQL을 사용했다면 백업한 mysql query를 PostgreSQL query로 변경해야 됩니다. 변경 방법은 mysql-postgresql-converter 프로젝트를 이용해서 변경할 수 있습니다. 그래서 백업한 tar를 풀어서 database.sql을 PostgreSQL query로 변경하고 다시 압축한 후에 복구 명령어를 실행하면 복구가 됩니다. 이 방법을 자세하게 설명한 블로그가 여기있습니다. 참고하세요 ^^
CONCLUSION
일단 업데이트를 완료하고 한숨부터 나오더라구요..
왜 사람들이 그냥 GitHub, BitBucket 서비스를 사용하는지 이해가 가기도 했고요. 글을 정리하면서 몇 가지 팁을 적어보겠습니다.
- 업데이트를 계획하신다면 omnibus-gitlab으로 업데이트하세요. omnibus-gitlab을 적용하려고 하지 않았다면 과정이 단순해질 수도 있었습니다. 하지만 앞으로 사용하고 관리하는 데 있어서 omnibus-gitlat이 더 좋다고 판단하여 업데이트했습니다.
- 업데이트는 반드시 임시 가상서버에서 진행해보고 실제 서버에 적용하세요. 만약 제가 실 서버에서 바로 적용했다면 개발팀이 힘들었을 것 같습니다.
- 끝까지 힘을 내요! (슈퍼파월)