본문 바로가기
Mobile : Android/Android Studio

[Android] 안드로이드 CI/CD # 1 : Bitrise + Firebase

by 신숭이 2022. 7. 24.

[Android] 안드로이드 CI/CD : Bitrise + Firebase

 

 

작성일 : 22/07/24 

 

 

CI (Continuous Integration) CD (Continuous Delivery)

 

지속적인 통합(Integration)이란 코드 및 기능이 수정되면, 지속적으로 빌드와 테스트를 수행하는 Repository로 Merge 하는 것을 의미한다. 즉 형상 관리와 검증 프로세스의 추가로 코드 품질을 유지한다. 

지속적인 전달(Delivery)는 개발자가 개발에만 집중할 수 있도록 빌드,  테스트, 배포 등을 자동화하여 효율성을 높인다. 

 

CI/CD는 GitHub, BitBucket, Bitrise 등 다양한 툴로 구성이 가능한데, Bitrise는 모바일 스택(Android, IOS, Flutter, React Native, Xamarin, Cordova)에 특화되어있는 툴이다.  따라서 이번 포스트에서 안드로이드 앱 배포의 파이프라인을 Bitrise를 통해 구축하고, 배포는 Firebase 그리고 알림은 Slack 채널을 이용하는 방법을 알아보겠다.

 

여기서 Firebase는 Product의 배포뿐 아니라, QA팀에 APK 파일 전달 또는 테스터 배포 등 다양한 배포 기능을 제공하기에 선택이 아닌 필수가 되어가고 있다.

 

우선 네 가지가 미리 준비되어있어야한다. (1번 빼고 회사에서 Android 개발자라면 다 되어있을 것)

  1. Bitrise.io 계정 생성
  2. Firebase 계정 생성 및 App 연결
  3. App을 관리하고 있는 프로젝트 저장소 (GitHub, Bitbucket, GitLab 등)
  4. Slack 가입 및 워크스페이스 생성 

 

 

 

 

순서는 다음과 같다. Bitrise는 CLI환경과 Web GUI 환경 모두 제공한다.

취향 것 사용하면 되는데, MZ세대면 그냥 GUI로 하자.

 

 

1. Bitrise에 앱 추가(Add new app)

2. Bitrise Workflow 환경 설정

3. Workflow 커스터마이징

4. Triggers 설정

 

 

 

 

 


 

 

1. Bitrise에 앱 추가(Add new app)

 

 

1-1. Workspase 설정 및 Private or public 중 선택

 

 

 

 

 

1-2. Repository 선택 : 프로젝트가 있는 레포를 연결한다. SSH 키 방식을 사용하기에, No, auto-add SSH key를 선택

 

 

 

 

1-3 Branch 선택 : 빌드를 위한 브랜치를 선택한다. 해당 브랜치 이름을 입력한다. (나중에 변경 가능)
입력 후 기다리면, Bitrise가 프로젝트를 분석하여 Configuration을 확인한다.

 

 

 

1-4. 프로젝트 Configuration을 설정한다. Root Directory는 . 으로 자동 설정되어있고, 빌드할 모듈을 App으로 설정한다. 마지막에 빌드 타입은 debug를 입력한다. (나중에 변경 가능)  -> Confirm

 

 

 

1-5. 앱 아이콘과 Webhook을 설정하는데 Register a Webhook for me! 를 선택하면 나중에 Push나 PR 이벤트가 발생할 때 빌드를 돌릴 수 있도록 할 수 있다. 모두 완료하고 마지막 버튼을 누르면 첫 빌드를 수행한다.

 

 

 

 


 

 

2. Workflow 환경 설정

 

Dashbord의 Build에서 방금 빌드한 정보 페이지에서 Edit Workflow를 누르면 파이프라인을 설정할 수 있다. 우선 디폴트로 설정되어있는 파이프라인을 먼저 알아보겠다. Workflow는 배포하기 전에 수행해야 할 것들을 설정하는 것을 말한다. 예를 들어 Lint 검사를 추가한다거나, Unit Test를 수행하도록 하게 한다거나, APK를 배포한다거나, Slack에 알림을 날리는 등 다양한 기능을 마치 파이프라인처럼 수행토록 커스터마이징 할 수 있다.

 

22/07/23 기준으로 디폴트로 설정된 Workflow는 다음과 같다.

 

  • Activate SSH key : Add App 때 자동으로 만들어진 SSH 키를 활성화
  • Git Clone Repository : 참조하고 있는 레포지토리를 Clone 해온다.
  • Bitrise.io Cache:Pull : 첫 빌드 때 (성공했다면) Bitrise 서버 도커에 캐시 된 Dependency들이 있다. 이를 가져온다.
  • Install Missing Android SDK componets : 누락된 SDK를 설치한다. (NDK 설치도 가능)
  • Android Unit Test : 유닛 테스트를 실행한다.
  • Bitrise.io Cache:Push : 빌드 성공 시, Bitrise 서버 도커에 캐시 한다.
  • Deploy to Bitrise.io : Bitrise 서버에 앱, 로그 등을 배포한다. 받아볼 수도 있다.

 

 

이제 Workflow를 커스터마이징 해보겠다. 목표는 Firebase를 통한 APK 배포 후, Slack에 알림을 띄우는 것. 

먼저 커스터마이징 하기 전에 이를 위한 각종 환경설정을 해야 한다.

 

 

2.1 이제 Workflow를 수정하기 전에 각종 환경설정을 진행한다.

 

 

Code Signing

APK에 필요한. jsk 파일 및 각종 정보를 입력한다.

(Android Studio -> Gerate Signed Bundle or APK)

 

 

 

Secrets

노출되면 안 되는 Key 정보들을 관리한다. 지금 여기에 적을 필요한 정보들은 Firebase CLI keyApp ID Slack API이다. 지금부터 입력하는 Key 정보들은 [Expose for Pull Requests?]를 체크해놓아야 PR 이벤트 때 제대로 동작할 수 있다.

 

 

1. Firebase CLI Key : 아래 링크에서 각 OS별 Firebase CLI 설치법을 참고하자. (필자는 npm으로 설치)

 

Firebase CLI 참조  |  Firebase Documentation

FirebaseVisionOnDeviceAutoMLImageLabelerOptions

firebase.google.com

 

Firebase cli 설치 후, 다음과 같이 입력하자. 그럼 Token을 부여받는다. 이를 Add new 버튼을 통해 입력.

firebase login:ci

 

2. App id : Firebase -> 우측 상단 톱니바퀴 -> 프로젝트 설정 -> 앱 ID 

 

이것을 Bitrise에서  Add new 버튼을 통해 입력.

 

 

 

3. Slack API : 아래 링크로 접속 후, 로그인 및 Your apps -> Manage your apps

 

 

Slack은 미래의 업무가 이루어지는 곳입니다

Slack은 여러분의 팀과 소통할 새로운 방법입니다. 이메일보다 빠르고, 더 조직적이며, 훨씬 안전합니다.

slack.com

 

[Create an App]을 누르면 다음과 같이 설정할 수 있다. 봇 이름과 적용할 워크스페이스를 설정한다.

 

 

[Incomming Webhook] -> ON 으로 설정 

 

 

 

[Add New Webhook to Workspace] 를 누르고 워크스페이스의 채널을 선택하면 해당 채널이 알림봇이 활약할 채널로 설정된다. 그리고 Webhook URL이 생기는데 이를 Bitrise에서 Add new key를 통해 추가한다.

 

 

 

 

Env Vars

각종 환경변수들을 관리하는 곳이다. 최초 설정 시 설정했던 값들이 적혀있다.

 

 

 

 

 

 

 


 

 

3. Workflow 커스터마이징

 

 

이제 Workflows 페이지로 돌아와서 파이프라인을 수정해보자. APK를 Firebase를 통해 Slack 채널로 배포하는 것을 목표로 한다. 우선 디폴트 파이프라인의 Android Unit Test 아래의 + 버튼을 누르면 다음과 같이 뜨는데 우리는 총 네 개의 스탭(Step)을 추가해야 한다. 검색해서 집어넣자.

 

  • Android Build
  • Android Sign
  • [BETA] Firebase App Distribution
  • Send a Slack message

 

 

Android Build

다음과 같이 설정한다.

  • Module : $MODULE
  • Variant : $VARIANT
  • Build type : apk

 

 

Android Sign

Code Signing에서 설정한 키파일과 패스워드 등이 자동으로 BITRISE... 으로 생긴 변수명으로 잘 입력이 되어있다. 이 부분은 별도로 건드릴 필요 없다. 다만 타겟 API Level이 30 이상이라면 다음과 같이 설정해야 한다.

 

  • Enable apksigner : true
  • Apk Signature Scheme : v2

 

 

[BETA] Firebase App Distribution

여기서는 입력해야 할 것들이 좀 있다. 필수는 다음과 같다.

  • Firebase Token : [Select secret variable]을 눌러 CLI Key로 지정한 변수를 기입
  • App Path : 처음에 3개의 PATH가 지정되어있는데, APK 파일만 하기 위해 $BITRISE_APK_PATH 만 지정
  • Firebase App ID : 이것도 Secrets에 지정해놓은 App id 변수명을 기입 (필자는 $APP_ID)

선택적으로 입력할 것은 다음과 같다

  • Service Credentials File : 인증 서비스를 사용하는 경우에 입력해야 한다.
  • Release Notes : 출시 노트를 작성할 수 있다.
  • Release Notes File : 출시 노트를 파일로 지정할 수 있다. (레포의 특정 경로에 파일로 두면 되고, 그 경로 기입)
  • Testers : 테스터를 지정할 수 있다. (이메일 입력 가능 : ali@example.com, bri@example.com, cal@example.com)
  • Test Groups : Firebase Console에 지정된 테스트 그룹을 지정하여 설정할 수 있다. (ex : qa-team)

 

 

 

Send a Slack Message

필수로 Slack Webhook URL에 아까 가져온 URL을 입력한다. (Secrets에 변수로 지정했던)

 

최종 Workflow 구성이다. 

 

 

 

 

 

 

 


4. Triggers  설정

 

이제 어떤 이벤트에 Workflow가 작동하게 할지 정해야 한다. 우리가 관리하고 있는 레포지토리에서 master 브랜치에 Pull Request가 발생할 때마다 자동으로 빌드 및 배포를 수행할 수 있도록 설정할 수 있다. primary는 디폴트로 설정된 것인데, 지금까지 만들어오던 Workflow가 primary라는 이름으로 되어있는 것이다. 즉 이벤트마다 다른 Workflow를 수행하게 할 수 있다는 것이다. 따라서 요리조리 써보면서 어떤 식으로 파이프라인을 동작케 하고 배포할지 고민해보면 될 것 같다.

 

설정 후

 

 

 

이제 PR을 날려보면 (Github)

 

Bitrise에서 자동으로 빌드를 수행하고 Slack에 메시지를 보낸다.

 

 

여기서 Install Page를 누르면 APK를 받을 수 있다.

 

 

 

 

 

다음 포스트에서는 Play store 배포 및 Flutter로 개발한 Android 앱의 Bitrise 배포 방법도 알아보고,

Bitrise는 무료 Plan으로는 제한이 있어 Github으로 구성하는 CI/CD도 알아보도록 하겠다.

 

 

 

 

끝.

댓글