Flutter Fastlane 으로 CICD 구축 [Android]

석상우·2022년 11월 9일
0
post-thumbnail

Overview

QA 기간만 되면 일주일에 열 두번 씩 수동배포 하는 대참사를 해결하기 위해 Fastlane을 공부해봤습니다.
이 글은 Fastlane 을 이용하여 Firebase Distribution, Play Console 에 자동배포 하는 과정을 기술한 글입니다.



1. Fastlane 설치

brew install fastlane
or
sudo gem install fastlane

homebrewRubyGem 을 통해 Fastlane 을 설치할 수 있습니다. 공식문서 에 따르면, Gem 은 Ruby 환경에 의존하기 때문에 brew 로 설치하는 것을 추천한다고 합니다.!


2. Fastlane init

cd android/
fastlane init

Android 폴더로 이동하셔서, init 명령어를 입력해줍시다.

초기에 패키지 이름을 입력하라고 나옵니다. 패키지 이름이 기억나지 않으신다면, app/build.gradle 파일 가셔서 applicationId 항목에 있는 패키지 이름을 가져옵니다.



3. Json Secret File

패키지 이름을 넣었더니, json secret file 경로를 넣으라고 합니다. json_secret_file 이 도대체 뭘까요? Fastlane Android 공식문서 Collect your Google credentials 섹션

자, 이제 json secret file 을 구해봅시다.


일단 Google Cloud Platform 사이트의 IAM 및 관리자 > 서비스 계정 을 찾아갑시다. 페이지 왼쪽 상단 위에 보시면 서비스 계정 만들기 버튼이 있을텐데 클릭합니다.


3-1. 서비스 계정 세부정보 입력

Fastlane 을 위해 만드는 서비스 계정이라, 이름은 fastlane 으로 설정했습니다.


3-2. 액세스 권한 부여

역할은 필수로 서비스 계정 사용자 로 해주셔야 합니다.


3-3. 사용자 액세스 권한 부여

해당 필드는 잘 몰라서 일단 비워놓고 확인 눌렀습니다.


3-4. 키 생성

서비스 계정쪽을 확인해보시면, 방금 만든 계정이 생성되어 있을겁니다. 계정을 누르고 들어간 뒤, 키 추가 버튼을 눌러 키를 생성합니다. 우린 JSON 키를 생성해야 하므로 JSON 으로 선택하고 만들어줍시다.


3-5. 키 저장 및 json secret file 입력

이제 키를 저장하고, Google Play Console 로 돌아가셔서, 사용자 및 권한 을 보시면 생성한 서비스 계정이 추가 된 것을 볼 수 있습니다. 알맞은 권한을 부여해줍시다.

부여한 뒤, 우리가 받은 JSON 키를 안전한 곳에 저장해둡시다. 저는 json 키를 serviceAccount.json 으로 저장하였고, 경로는 android/app/ 에 저장하였습니다.
앱 코드 내에 키 파일을 저장한게 git 에 올라가면 안되니, gitignore 에 꼭 추가시켜줍시다.

metadata setup 할거냐고 물어보는데, 스토어에 올릴 때 필요한 data 이므로 y 해주고 다운받읍시다.



4. Fastlane Firebase Distribution 설정

Fastlane 을 이용하여 Firebase App Distribution 에 배포하려면 플러그인 설치, 인증 등을 해야 합니다.

4-1. Firebase Plugin 설치

fastlane add_plugin firebase_app_distribution

Firebase 플러그인을 설치할 때 Your user account isn't allowed... 라는 메세지가 나오면서 Password 를 입력하라고 할 수도 있는데, 그냥 Mac password 입력하고 넘어가도록 합시다.

4-2. Firebase 로그인

fastlane run firebase_app_distribution_login

CLI로 Firebase 에 로그인 하는 과정입니다. 커맨드 입력 시 접속할 수 있는 링크 URL 이 터미널에 보일텐데, 접속해서 Firebase 인증 해주시면 Refresh Token 이 날아옵니다. 해당 토큰은 잘 보관해주세요.


5. 환경변수[ENV] 설정

각 개발자 마다 Firebase Refresh Token 이 환경에 따라 달라질 수 있는데, Fastlane 에서는 .env 파일로 환경변수를 관리하여 서로 다른 환경에서도 동일한 Lane 을 사용할 수 있습니다.

# Appfile
json_key_file(ENV["JSON_KEY_FILE_PATH"])
package_name("com.blueant.ollacare")

# .env
JSON_KEY_FILE_PATH="...json"

Fastlane 폴더 안의 Appfile 입니다. package_name 은 어느 환경에서나 동일하지만, json_key_file 는 개발자 마다 다르기 때문에 환경변수로 치환합니다.



6. Firebase Distribution Lane 생성

Firebase 설정이 끝났으니, 이제 Firebase App Distribution 에 Upload 하는 Lane 을 생성해보겠습니다.

desc "Lane for distribution"
lane :firebase_aos do
    gradle(
        task: "assemble",
        build_type: "Debug",
        properties: {
          "android.injected.version.code" => 100,
          "android.injected.version.name" => "2.5.1",
        }
    )

    firebase_app_distribution(
        app: ENV["AOS_FIREBASE_APP_DISTRIBUTION_APP"],
        firebase_cli_token: ENV['FIREBASE_TOKEN'],
        groups: "test",
        debug: true,
        android_artifact_type: "APK",
        release_notes: "안녕 난 석상우 이건 안드로이드 fastlane test",
        apk_path: "/Users/jerry/workspace/ollacare_app/build/app/outputs/flutter-apk/app-debug.apk"
    )
end

위 Lane 은 Firebase Ditribution 테스팅 용도로 작성했으며, 더 자세한 Action 은 공식문서 에서 확인하실 수 있습니다.


정상적으로 Firebase 에 업로드 되었다고 메세지가 뜨네요! 이제 Firebase 를 확인해봅시다.


성공 :)



7. PlayConsole 업로드

profile
Mobile App Developer

0개의 댓글