본문 바로가기

개발환경 설정/Travis-ci

Github+Travis CI로 안드로이드 CI 환경 구축하기 (Gradle)

CI(Continuous Integration)은 소프트웨어어를 개발하면서 무엇인가를 수정할 때, 이를 전체 시스템에 반영 후 테스트 및 빌드를 수행하여 이상이 없는지 지속적으로 검사하는 것을 말합니다. 이를 통해 문제가 생기는 것을 비교적 빠른 시간 안에 발견할 수 있으며, 나중에 출시에 임박해 여러 이슈들과 각 이슈들을 수정하며 생기는 오류(Side-effect)의 발생을 최소화 할 수 있습니다.


이와 같은 특징을 갖는 CI는, 여러 사람의 협업을 통해 진행되는 오픈소스 프로젝트에는 꼭 필요한 존재입니다. 오픈소스로 진행되는 프로젝트들, 특히 Github에서 운영되는 프로젝트들은 Pull request를 통해 여러 사용자들의 패치를 받는 경우가 많습니다. Pull request가 들어오면, 해당 프로젝트 운영자는 코드 리뷰 후, 전체 코드와 병합(Merge)하게 됩니다. 이 과정에서 빌드 테스트 및 테스트 코드를 통해 해당 코드를 반영해도 좋은지 확인하는 절차를 거치게 되는데요, 이를 수동으로 진행한다면 시간도 오래 걸리기에 Pull request에 대한 피드백 또한 지연될 것입니다.


이러한 문제를 해결하려면 별도로 CI서버를 운영해야 하는데, Travis CI를 사용하면 별도 서버를 운영하지 않으면서도, 간편하게 Github에서 호스팅되는 프로젝트의 CI 환경을 구축할 수 있습니다. (공개 저장소가 아닐 경우, 유료 서비스를 사용하면 동일하게 Travis CI를 사용하여 CI환경을 구축할 수 있습니다)


Travis CI를 사용할 수 있는 언어 및 플랫폼은 매우 다양하지만, 이 포스트에서는 Gradle 빌드 시스템을 사용하는 안드로이드 프로젝트를 Travis CI와 연동하는 방법에 대해 알아보겠습니다.


Github 계정으로 Travis 가입하기


Travis 사이트 (https://travis-ci.org/)에 접속하면, 임의의 프로젝트의 빌드 진행 상황이 표시됩니다. 화면에 표시되는 프로젝트들을 보다 보면, 정말 다양한 프로젝트가 Github와 Travis를 사용하는구나 새삼 느껴지더군요.


Travis를 사용하려면 Github 계정으로 로그인이 필요합니다. 우측 상단의 'Sign in with Github'링크를 클릭하면 로그인 화면이 표시되는데, 여기에 Github 계정 정보를 입력 후 로그인을 수행합니다. 


로그인이 완료 되면 다음과 같이 초기 설정중이라는 메시지가 표시됩니다. ('One more thing'이라 하면.. 거 어디서 많이 들어본 것 같은데..)




초기 설정 및 계정 연결 절차가 모두 완료되면, 다음과 같이 자신의 Github 계정에 등록된 저장소가 표시됩니다. 




Travis 설정 파일 (.travis.yml) 작성 및 저장소 반영


Travis를 사용하여 Github 내 프로젝트를 빌드하려면, 프로젝트 빌드에 필요한 각종 설정값 및 빌드 절차를 기술한 '.travis.yml'이라는 이름의 파일이 필요합니다. (이름 앞에 마침표('.')가 붙어 있어요!) 우리는 Gradle을 사용하여 안드로이드 애플리케이션을 빌드할 것이므로, 이에 맞는 빌드 환경을 갖추도록 설정 파일을 작성해야 합니다.


안드로이드 애플리케이션 빌드를 위해 작성하는 설정 파일 내용은 크게 다음과 같습니다.


빌드 환경 설정 (환경변수 설정 및 안드로이드 SDK 설치)

Travis에서는 일종의 '가상 리눅스 환경'을 제공하며, 빌드가 끝나면 빌드 툴 및 환경설정이 모두 사라집니다. 하지만 안드로이드는 일반적인 자바 프로젝트와는 달리, 플랫폼 이미지와 빌드 툴이 필요합니다. 때문에, 매 번 빌드를 수행할 때 마다 안드로이드 빌드 환경을 설정해 주어야 합니다. 아래는 안드로이드 SDK 설치를 위한 환경 설정 내용입니다. 안드로이드 SDK를 다운로드하여 필요한 구성요소를 설치하도록 되어 있으며, 빌드 툴 버전은 프로젝트 설정에 따라 알맞게 변경하면 됩니다.


빌드 스크립트

프로젝트를 빌드하는 빌드 스크립트를 작성합니다. 이 글에서는 gradle로 빌드를 수행하기 위해 다음 내용을 설정 파일에 추가합니다. 프로젝트 내에 제공되는 Gradle wrapper을 사용하므로, gradle을 별도로 설치하지 않아도 됩니다. 위의 안드로이드 SDK 설정부에 이어 다음 내용을 추가합니다.


script :

  -./gradlew build


설정 파일 작성은 이 정도로 마치고, 이 파일을 저장소의 루트 디렉터리에 저장합니다.

위의 빌드 스크립트까지 적용하게 되면 설정 파일의 모습은 최종적으로 다음과 같은 형태를 띄게 됩니다.




Travis에서 저장소 빌드 활성화 및 업로드


Travis 사이트에 접속 후, 상단 우측 계정 메뉴에서 'Accounts'로 들어가면 자신의 계정과 저장소가 표시됩니다. 저장소 목록에서 Travis와 연동할 프로젝트를 'ON' 상태로 변경합니다. 다음은 프로젝트가 'ON' 상태로 변경된 모습을 보여줍니다.



자, 이제 위에서 반영했던 변경사항을 Github에도 반영할 차례입니다. .config.yml 파일이 저장소 내에 있어야 travis에서 빌드를 돌릴 수 있습니다.


빌드 확인


모든 작업이 끝났으니, 확인만 하면 됩니다. Github쪽에 새로운 버전이 커밋되면, 잠시 후 Travis에서 커밋된 내용을 받아 빌드 테스트를 수행합니다.





이로써 오픈소스 프로젝트를 운영하는 데 딱 맞는 CI 환경 구축이 완료되었습니다. 생각보다 간단하지요? 


빌드 상태 아이콘


Travis에서는 현재 빌드 상태를 알려주는 아이콘을 제공합니다. 저장소를 선택한 후, 우측 상단을 보면 다음과 같이 빌드 상태를 보여주는 아이콘을 찾을 수 있을 겁니다.




아이콘을 클릭하면 다음과 같이 빌드 상태 아이콘을 표시할 수 있는 다양한 코드를 제공합니다. 입맞에 맞춰 사용하면 됩니다 :)




이 글에서 예제로 보여주고 있는 google_maps_v2_support 라이브러리 뿐만 아니라, 블로그 예제 저장소인 blog_samples도 Travis와 연동해 놓은 상태이니 .travis.yml  설정 방법에 대해 궁금하신 분들은 해당 프로젝트 내의 설정 파일을 참고하셔도 좋습니다~