Monthly Archives: April 2015

고통과 함께한 GITLAB(깃랩) 업데이트

안녕하세요. 이음소시어스 개발팀 서버개발자 육승찬(루)입니다.

저희 개발팀에서는 깃랩을 사용하고 있습니다. 이번에 깃랩 버전을 업데이트하게 되었고, 그 과정에서 겪은 경험을 공유하면 좋을 것 같아 “고통과 함께한 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라는 것을 보고 업데이트가 필요하다고 생각이 들기도 했고, 개인적으로 써보고 싶어서 팀장님께 깃랩 업데이트를 제안 드렸습니다.

daum_net_20150321_204544

팀장님도 좋다고 하셔서 업데이트하기로 했습니다. (이때 고통이 뒤따를지 생각지도 못했습니다)

최근의 깃랩은 gitlabhqomnibus-gitlab으로 배포되고 있습니다. gitlabhq를 이용하여 설치하면 DB, REDIS 등 여러 소프트웨어를 직접 설치하고 깃랩에 연결하여 사용했었습니다. 하지만 omnibus-gitlab는 필요한 소프트웨어가 포함되어 패키지 형태로 설치됩니다. 또한, omnibus-gitlab는 기타설정이 매우 쉬우므로 관리하기가 좋습니다.

그래서 개발 서버에 설치된 깃랩 6.1을 omnibus-gitlab으로 업데이트하고자 하였습니다.

HOW ?

  • 제가 생각했던 첫 번째 (실패한)방법입니다.

스크린샷 2015-04-15 오후 3.07.04

먼저 깃랩 6.1에서 데이터를 백업하고 omnibus-gitlab을 설치하여 데이터를 복구하는 것이었습니다. 깃랩은 데이터 백업과 복구기능을 지원하기 때문에 다음 명령어로 데이터를 백업할 수 있습니다.

백업이 완료되면 tmp/bakups 안에 [timestamp]_gitlab_backup.tar 형태의 파일이 저장됩니다.  백업이 완료된 후 omnibus-gitlab을 설치합니다. 패키지 형태로 배포되고 있기 때문에 설치가 매우 쉽습니다. 자세한 설치방법은 깃랩 홈페이지에 있습니다.

omnibus-gitlab 설치가 완료되면 /var/opt/gitlab/backups 안에 위에서 백업한 파일을 옮기고 아래 복구 명령어를 실행했습니다.

그러면 아래와 같은 에러가 발생합니다.

그렇습니다.. 깃랩 백업&복구는 버전이 다르면 적용할 수 없습니다.

으아니

아니 이게 무슨소리요…

  • 두 번째 (실패한)방법입니다.

스크린샷 2015-04-15 오후 3.26.57

 

깃랩은 버전별로 업데이트하는 가이드를 제공하고 있습니다.  저는 gitlab 6.x or 7.x to 7.9(해당 링크는 계속해서 업데이트 되기 때문에 링크가 깨질 수 있습니다. 만약 링크에서 404에러가 난다면 여기로 접속해보세요.) 업데이트 가이드를 참고했습니다. 가이드에 나와 있는 방법대로 업데이트를 진행하고 있었는데 문제가 하나 발생했습니다. 현재 서버에 설치되어있는 gitlab-shell 프로젝트가 깃 프로젝트가 아니었습니다. 일단 gitlab-shell 프로젝트 관련 내용을 넘기고 나머지 커맨드를 입력하고 있었는데 데이터베이스 마이그레이션 부분에서 gitlab-shell 관련해서 에러가 났습니다.

daetul_mung

결국 BITNAMI로 설치 된 깃랩을 업데이트하는 것을 포기했습니다.

  • 세 번째 (성공한)방법입니다.

스크린샷 2015-04-15 오후 3.37.45

 

처음 생각했던 것보다 많이 복잡해졌습니다.. 하지만 희망을 가지고 (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

일단 업데이트를 완료하고 한숨부터 나오더라구요..

유병재_SNL코리아_극한직업_모음_보기qd

왜 사람들이 그냥 GitHub, BitBucket 서비스를 사용하는지 이해가 가기도 했고요. 글을 정리하면서 몇 가지 팁을 적어보겠습니다.

  • 업데이트를 계획하신다면 omnibus-gitlab으로 업데이트하세요. omnibus-gitlab을 적용하려고 하지 않았다면 과정이 단순해질 수도 있었습니다. 하지만 앞으로 사용하고 관리하는 데 있어서 omnibus-gitlat이 더 좋다고 판단하여 업데이트했습니다.
  • 업데이트는 반드시 임시 가상서버에서 진행해보고 실제 서버에 적용하세요. 만약 제가 실 서버에서 바로 적용했다면 개발팀이 힘들었을 것 같습니다.
  • 끝까지 힘을 내요! (슈퍼파월) 
rsz_1iumstellar

우린 답을 찾을 것이다. 늘 그랬듯이..