-
오픈소스로 구성하는 데브옵스 시스템 - 빌드와 배포DevOps 2017. 4. 3. 22:31
저의 SE 경력 중 제조업에서 근무한 3년을 제외하고는 빌드와 배포는 항상 따라다니는 업무 중 하나였습니다.
처음에는 개발자가 빌드한 결과물을 테스트 서버에 배포하는 작업을 담당했는데요...각자 다른 역할의 서버에 (예를들어 로그인, 마스터서버, 메인서버, 채팅서버 같은...) 해당 역할의 빌드 바이너리를 수작업으로 배포를 했었지요. 그러다가 배포를 위한 스크립트를 만들고, MFC로 GUI를 만들어 서버에 접근하지 않고 여러대의 서버에 동시에 배포할 수 있는 툴을 만들기도 했답니다.
그러다가 MFC GUI툴을 웹으로 구현하고 SVN과 연동해 빌드 바이너리를 SVN에서 관리하면서 배포 버전을 관리하는 툴을 개발하게 되었는데요. (이건 제가 개발한 건 아니고 개발팀에 자문정도만 했습니다. ㅎㅎ) 이 때까지도 빌드는 개발자의 업무고 배포는 시스템 운영자의 역할로 분리가 되었습니다.
그런데 개발기한은 항상 지연되고, 빌드가 나와도 QA에서 나오는 Bug fix로 재빌드가 들어가기 일쑤였습니다. 배포담당자는 서버 배포를 위해 끝모를 대기를 해야했죠. 반대로 빌드가 나와도 배포담당자가 부재중이면 후속 작업이 진행되지 않는 상황도 있었습니다.
이런 업무 역할의 분리로 생기는 인력 리소스 낭비와 불필요한 시간 지연을 없애기 위해 최근에 데브옵스가 대두되고 있는지도 모르겠네요.
옛날 이야기가 좀 길어졌네요 ㅎㅎ...아무튼 저는 빌드와 배포를 위해 아래와 같은 컨셉의 시스템이 필요하다고 생각을 했습니다.
- 어떠한 플랫폼에서도 동일하게 적용 가능한 빌드와 배포 방식이어야 한다.
- 빌드와 배포를 위해 서버나 시스템에 접근하지 않는다. 오로지 툴을 이용해서 작업을 진행한다.
- 빌드와 배포로 인하여 시스템 설정을 바꾸지 않는다.
- 빌드와 배포를 위해 서버에 스크립트를 만들어 배포하지 않는다.
- 빌드 결과물은 내부 저장소에서 버전을 갖고 관리된다.
- 배포는 원하는 버전을 사용자가 지정할 수 있으며, 롤백도 손쉬워야 한다.
- 빌드와 배포중에도 서비스는 무중단으로 진행되어야 한다.
그리고 현재 저희는 Jenkins를 이용한 빌드 환경이 구축되어 있는 상태였고, 최근에 유행하는 Docker를 이용한 무중단 배포 환경에 주목하고 있었던터라 아래와 같은 문서들을 찾을 수 있었습니다.- 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를 지원한다.
개발자가 gitlab에 push을 하고 webhook이나 수동 빌드로 jenkins에서 git의 소스를 가져와 maven 빌드를 진행합니다. maven 빌드가 완료되면 해당 war 파일을 ROOT.war로 만들어 Docker로 빌드하고 Nexus에 버전 tagging하여 업로드 합니다. 이후에는 Jenkins에서 rest api를 통해 자동 배포를 하거나, 수동으로 marathon에서 application을 Mesos로 배포하는 과정을 거칩니다.너무 추상적인가요???그러면 이제부터 본격적으로 하나씩 구성을 해보도록 하겠습니다.'DevOps' 카테고리의 다른 글
오픈소스로 구성하는 데브옵스 시스템 - Marathon을 이용한 App실행 (0) 2017.04.26 오픈소스로 구성하는 데브옵스 시스템 - Mesos 클러스터 구축 (0) 2017.04.10 오픈소스로 구성하는 데브옵스 시스템 - OS 와 Docker 설치 (0) 2017.04.04 오픈소스로 구성하는 데브옵스 시스템 - 개념이해 (0) 2017.03.30 오픈소스로 구성하는 데브옵스 시스템 - 프롤로그 (0) 2017.03.30