오픈소스로 구성하는 데브옵스 시스템 - 빌드와 배포
저의 SE 경력 중 제조업에서 근무한 3년을 제외하고는 빌드와 배포는 항상 따라다니는 업무 중 하나였습니다.
처음에는 개발자가 빌드한 결과물을 테스트 서버에 배포하는 작업을 담당했는데요...각자 다른 역할의 서버에 (예를들어 로그인, 마스터서버, 메인서버, 채팅서버 같은...) 해당 역할의 빌드 바이너리를 수작업으로 배포를 했었지요. 그러다가 배포를 위한 스크립트를 만들고, MFC로 GUI를 만들어 서버에 접근하지 않고 여러대의 서버에 동시에 배포할 수 있는 툴을 만들기도 했답니다.
그러다가 MFC GUI툴을 웹으로 구현하고 SVN과 연동해 빌드 바이너리를 SVN에서 관리하면서 배포 버전을 관리하는 툴을 개발하게 되었는데요. (이건 제가 개발한 건 아니고 개발팀에 자문정도만 했습니다. ㅎㅎ) 이 때까지도 빌드는 개발자의 업무고 배포는 시스템 운영자의 역할로 분리가 되었습니다.
그런데 개발기한은 항상 지연되고, 빌드가 나와도 QA에서 나오는 Bug fix로 재빌드가 들어가기 일쑤였습니다. 배포담당자는 서버 배포를 위해 끝모를 대기를 해야했죠. 반대로 빌드가 나와도 배포담당자가 부재중이면 후속 작업이 진행되지 않는 상황도 있었습니다.
이런 업무 역할의 분리로 생기는 인력 리소스 낭비와 불필요한 시간 지연을 없애기 위해 최근에 데브옵스가 대두되고 있는지도 모르겠네요.
옛날 이야기가 좀 길어졌네요 ㅎㅎ...아무튼 저는 빌드와 배포를 위해 아래와 같은 컨셉의 시스템이 필요하다고 생각을 했습니다.
- 어떠한 플랫폼에서도 동일하게 적용 가능한 빌드와 배포 방식이어야 한다.
- 빌드와 배포를 위해 서버나 시스템에 접근하지 않는다. 오로지 툴을 이용해서 작업을 진행한다.
- 빌드와 배포로 인하여 시스템 설정을 바꾸지 않는다.
- 빌드와 배포를 위해 서버에 스크립트를 만들어 배포하지 않는다.
- 빌드 결과물은 내부 저장소에서 버전을 갖고 관리된다.
- 배포는 원하는 버전을 사용자가 지정할 수 있으며, 롤백도 손쉬워야 한다.
- 빌드와 배포중에도 서비스는 무중단으로 진행되어야 한다.
- Continuous Delivery with Docker on Mesos in less than a minute – Part 2
- Delivering eBay’s CI Solution with Apache Mesos – Part II
첫번째 문서에서 크게 바뀐건 없네요..ㅎㅎㅎ
간단하게 저희가 사용할 솔루션을 소개하자면...
- gitlab : github와 동일한 기능을 내부 시스템에서 운영하게 해주는 버전관리 솔루션이다. 설치형은 무료로 운영 가능하다.
- Jenkins : 오픈소스 CI(continuous integration) 솔루션이다. 자세한 내용은 위키를 참고하세요.
- Nexus : 원래는 maven에서 사용할 수 있는 무료 repository 였는데 3.0 버전부터 docker repository를 지원한다.