저는 Fastlane 을 사용하기전에는 triplet 을 이용하여 자동 배포 환경을 구축 했었습니다.
https://jsieun73.tistory.com/183?category=611190 참고
이전에 Fastlane & Firebase App Distribution 을 이용한 앱 자동 배포하는 환경을 구축 해봤습니다.
fastlane 설치방법과 GCP 설정 방법은 아래 링크 참고 하시면 되겠습니다. :)
https://jsieun73.tistory.com/190?category=611190
위링크를 통해 GCP, Fastlane 기본적인 설정이 된 상태에서 Google PlayStore 에 배포 환경에 대해 설명 해 보도록 하겠습니다.
프로젝트 환경 설정
1. .aab 로 업로드 하는 상태
2. 수동 배포를 진행하는 타입 -> PlayStore 에 검수 완료가 되면 사용자에게 % 단계적으로 배포하는 타입
3. master 브렌치에 푸시가 되면 앱 배포가 진행 되는 상태
Relase-Upload.yml 설정
name: Build and upload release aab
on:
push:
branches: [ master ]
# 수동 WorkFlow 설정
# workflow_dispatch:
jobs:
publish_aab:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
# JDK 설정
- name: set up JDK 11
uses: actions/setup-java@v2
with:
java-version: '11'
distribution: 'adopt'
check-latest: true
# Ruby Setting
- uses: ruby/setup-ruby@v1
with:
ruby-version: 2.7.2
bundler-cache: true
- name: Decode Keystore
id: decode_keystore
uses: timheuer/base64-to-file@v1
with:
fileName: '/keystore/release/deeplinkBot.jks'
encodedString: ${{secrets.APP_RELEASE_KEY_STORE_BASE_64}}
# Fastlane Setting
- name: Set Up fastlane And Publish Google Play
uses: maierj/fastlane-action@v2.2.0
with:
lane: 'productionDeploy'
env:
SIGNING_KEY_ALIAS: ${{ secrets.SIGNING_KEY_ALIAS }}
SIGNING_KEY_PASSWORD: ${{ secrets.SIGNING_KEY_PASSWORD }}
SIGNING_STORE_PASSWORD: ${{ secrets.SIGNING_STORE_PASSWORD }}
GithubAction 으로 앱을 자동 배포 하기 때문에 fastlane 으로 배포하는 스크립트만 가져왔습니다.
저 같은경우에는 프로젝트내에 상용 버전용 .jks 파일이 없습니다. Github Actions Secrets 에서 .jks 파일을 base64String 을 처리해서 깃허브에 가지고 있습니다. 그래서 중간에 보면 Decode Keystore 가 있는데 그부분이 String to jks 로 변환 해주는 스크립트입니다.
Fastlane 을 하기 위해서는 Ruby 설정과 "maierj/fastlane-action@v2.2.0" 설정해주고
lane: {내가 fastfile 에 설정한 스크립트 명} 을 입력해주시면 되겠습니다.
env: 이거는 fastlane 에서 스크립트 실행에 필요한 환경변수값들이라고 보시면 되겠습니다.
Fastlane 을 이용한 Google Play Publish 해보기
1. 릴리즈 Task 설정
tasks.register("release") {
dependsOn(tasks["clean"])
dependsOn(tasks["bundleRelease"])
mustRunAfter(tasks["clean"])
}
위에 처럼하면 PC 에서 "./gradlew relase" 로 입력하면 .aab 로 만들어지게 됩니다.
2. FastFile 설정
desc "Deploy a new version to the Google Play (ProductionType)"
lane :productionDeploy do
gradle(task: "release")
# 특정 폴더에 .aab 파일 찾고 나서 앞에 .. -> . 치환 처리
filePath = Dir['../app/build/outputs/bundle/release/*.aab'].last
artifactPath = filePath.sub("..",".")
puts artifactPath
upload_to_play_store(
track: "production",
aab: artifactPath,
skip_upload_metadata: true,
skip_upload_images: true,
skip_upload_screenshots: true,
skip_upload_apk: true,
release_status: "inProgress",
rollout: "0.3"
)
end
파라미터에 대해 몇가지 설명을 드리면,
aab
.aab 가 만들어진 위치값을 설정하는 "aab" 입니다.
제가 개인적으로 운영중인 딥링크 테스트 앱기준으로 "artifactPath" 값은 아래와 같습니다.
./app/build/outputs/bundle/release/QuickDeepLink(1.0.3)-release.aab
release_status
앱 배포상태를 어떻게 할건지에 대한 파라미터 값입니다. 도큐먼트에 잘 나와있지만, 한국어로 번역하자면
completed: 검수 완료후 전체(100%) 출시
draft: 릴리즈 노트, aab 업로드 해놓고 검수 신청을 안한 상태
inProgress: 단계적 출시 진행 해당 값을 설정해놓으면 사용자 몇 %로 출시 할건지 필요한 값인 rollout 이 무조건 필요합니다.
rollout
release_status 값이 inProgress 인 경우 사용자 몇% 로 단계적 출시 할건지 입력값입니다.
ex.) "0.3" -> 30% 배포
3. 빌드 성공이후 GitAction 화면
추가적으로 앱을 배포할때 Signing 처리는 필수인데 저 같은 경우에는 어떻게 되어있는지 공유드리겠습니다. 특별한건 아니고 아래와 같습니다.
app.gradlew.kts
signingConfigs {
create("release") {
val files = file(SigningConfig.Release.storeFilePath).listFiles()
if (files != null) {
storeFile = files.first()
storePassword = System.getenv(SigningConfig.Release.keyStorePassword)
keyAlias = System.getenv(SigningConfig.Release.keyAlias)
keyPassword = System.getenv(SigningConfig.Release.keyPassword)
}
}
create("staging") {
storeFile = file(SigningConfig.Staging.storeFile)
storePassword = SigningConfig.Staging.keyStorePassword
keyAlias = SigningConfig.Staging.keyAlias
keyPassword = SigningConfig.Staging.keyPassword
}
}
buildSrc
object SigningConfig {
object Release {
const val storeFile = "../keystore/release/deeplinkBot.jks"
const val storeFilePath = "/home/runner/work/_temp/keystore/release"
const val keyStorePassword = "SIGNING_STORE_PASSWORD"
const val keyAlias = "SIGNING_KEY_ALIAS"
const val keyPassword = "SIGNING_KEY_PASSWORD"
}
}
상용버전에 사용할 .jks 파일은 깃허브 시크릿에 저장되어 있고, staging 이라고 AppTester 에 배포할 타입은 ".jks" 파일은 프로젝트내에 있습니다.
회고
생각보다 Fastlane 간단 예제만 나와있지 실제 서비스에 적용할때 어떻게 해야 하는지에 대해 한국화 자료가 많이 없었습니다. 역시나..아니면 제가 검색을 잘 못하는걸지도 모르겠지만...좀 찾다가 잘 안나와서 그냥 도큐먼트를 보니 해답이 나왔습니다. (https://docs.fastlane.tools/actions/upload_to_play_store/
도큐먼트를 보다가 느낀게 파라미터값을 어떤 형태로 넣는지 알려주면 좀 더 좋았을거 같다는 생각이..크흠..
그리고 Fastlane 스크립트 작성시 루비 언어로 해야 하다보니 아주 깔짝 Ruby Docs를 보게되어 많은 공부를 하게 된 계기가 되었습니다.
지금까지 긴글 읽어주셔서 감사합니다.
안드로이드 과외를 받고 싶은 학생분들이라면 아래 링크 클릭!
https://jsieun73.tistory.com/189
'android' 카테고리의 다른 글
[안드로이드] 갤러리 라이브러리 소개 (0) | 2023.01.03 |
---|---|
[안드로이드] RecyclerView 공통 어댑터 개편기 (0) | 2022.12.25 |
[안드로이드] 앱 테스터에 자동 배포 도전해보기! (1) | 2022.09.29 |
[안드로이드] 화면단위로 모듈화 하는 feature module이란? #멀티모듈 (0) | 2022.09.06 |
[안드로이드] ReactiveX 개념 소개 (1) | 2022.07.03 |