[Article Summary]우아한 라이더스 모바일 개발팀의 CI/CD 도입기

[Article Summary]우아한 라이더스 모바일 개발팀의 CI/CD 도입기

안드로이드 분야의 CI/CD 포스팅 을 작성하기 위해 학습한 내용을 따로 요약하기 위한 포스팅입니다.

요약

팀 설명

라이더스 개발팀의 포스팅

라이더스 개발팀은 배달되지 않는 음식점의 음식을 민트색 핼멧을 쓴 라이더 분들이 오토바이를 이용하여 음식을 익업 후 고객님께 배달하는 일정 과정들을 원활하고 효율적으로 운영이 될 수 있도록 개발하는 팀이다.

라이더스는 B2B앱으로써 일반 사용자를 위한 앱이 아닌 라이더스 기사님들을 위한 앱이다.

CI/CD 를 시작하게 된 계기

라이더스는 한번 배포가 이루어 질 때 3개의 각기 다른 주소를 가진 5개의 apk 파일이 만들어지고 Github 및 베타와 운영 시스템에 배포가 이루어 지게 된다.

수동으로 개발자의 손을 통해서 배포가 이뤄지다 보니 Human Error 의 발생의 소지가 있고 앱은 서버의 배포와 달리 한번 잘못 배포가 되면 다시 배포하는 과정의 어려움이 커 최대한 자동화를 시키려고 함.

Jenkins for Android Using Docker 도입 배경

CI/CD를 위한 툴로는 여러가지가 있다.

Travis CI, Circle CI, BITRISE, Jenkins 등이 있다. 이 중 Jenkins 를 사용할 것.

Jenkins 의 장점

  • 무료

  • 사용자 정이 옵션

  • 방대한 양의 플러그인

  • 다양한 적용 사례 및 풍부한 레퍼런스

  • Remote access API 제공

Docker 를 선택한 이유

젠킨스 서버를 띄우기 위해서는 여러가지의 서버 설정등과 설치들이 필요하다.

모든 일련의 과정을 Docker file 에 작성하고 손쉽게 띄울 수 있는 도커를 선택해 작업 시간 및 운영에 필요한 리소스를 줄이고자 함

기대하는 이상적 시스템

이상적인 시스템

내부적으로 Slack을 사용중

APK를 타겟 시스템 별로 아래 그림과 같이 배포하도록 만듬

Slack에서 bot api 를 지원해줘서 아래처럼 관리함

Docker For Jenkins 이미지를 만들기 위한 DockerFile 작성

Docker 는 docker hub 라는 repository 가 있다. github 과 비슷.

간단하게 Jenkins official dockerfile 을 이용하고 약간의 추가 세팅으로 Jenkins 사용을 위한 docker image 를 만듬

Jenkins Official 이미지는 Android SDK 등이 포함되지 않았음

공식 이미지 레포를 클론해 몇 가지 세팅으로 커스텀 후에 사용

Gradle , OpenJDK, Android SDK를 추가함

이렇게 CI/CD를 도입해 배포 절차를 자동화하면 아래 같은 번거로움에서 해방될 수 있다

카톡


참고