[Android] Fastlane #2 (PlayStore)
실제 PlayStore에 게시할 lane 설정을 해보자
저번에 생략했던 metadata를 받아오는 작업부터 시작
1
fastlane supply init --track [production, beta, alpha, internal]
작업이 완료되면 fastlane 디렉토리에 여러 디렉토리, 파일들이 받아와진다
경로 : /fastlane/metadata/android/ko-KR
changelogs
디렉토리는 내가 추가해준 것으로, 출시노트를 업로드시 적용시키기 위해 만들어 주었다
다음으로 배포 lane을 작성하면 된다
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
desc "Lane for Bundle Open-testing"
lane :aab do |options|
gradle(task: "clean")
gradle(
task: "bundle",
build_type: "Release",
print_command: true,
properties: {
"android.injected.signing.store.file" => ENV['ANDROID_APP_SIGNING_KEY'],
"android.injected.signing.store.password" => ENV['ANDROID_APP_SIGNING_STORE_PASSWORD'],
"android.injected.signing.key.alias" => ENV['ANDROID_APP_SIGNING_KEY_ALIAS'],
"android.injected.signing.key.password" => ENV['ANDROID_APP_SIGNING_KEY_PASSWORD'],
}
)
upload_to_play_store(
track: "beta",
json_key: ENV['ANDROID_APP_GOOGLE_KEY'],
aab: ENV['ANDROID_APP_AAB_PATH'],
skip_upload_metadata: true,
skip_upload_images: true,
skip_upload_screenshots: true,
skip_upload_apk:true
)
# 입력받은 버전으로 디렉토리 생성 후 apk이동
if options[:version]
version = options[:version]
else
version = prompt(text: "Enter the specific version")
end
versionName = version
# 해당버전 폴더 생성 후 aab, apk파일 생성
sh "mkdir -p ../../release_ant_#{versionName}_bundle"
sh "java -jar $BUNDLETOOL_FILE build-apks --bundle=../app/build/outputs/bundle/release/app-release.aab --output=../../release_ant_#{versionName}_bundle/#{versionName}.apks --mode=universal"
sh "mv ../app/build/outputs/bundle/release/app-release.aab ../../release_ant_#{versionName}_bundle/app-release.aab"
# 입력받은 버전으로 깃 태그 푸시
git_tag(versionName)
end
-
기본적인 동작은 빌드 → 게시 → 후처리 순이다
-
먼저 배포 lane을 선언
1
lane :aab do |options|
- options을 세팅해준 이유는 lane 실행 시 버전코드를 입력받아서 해당 버전코드로 디렉토리 생성, 깃 태그 푸시까지 하기 위함이다
-
다음으로 빌드 설정
1 2 3 4 5 6 7 8 9 10 11 12
gradle(task: "clean") gradle( task: "bundle", build_type: "Release", print_command: true, properties: { "android.injected.signing.store.file" => ENV['ANDROID_APP_SIGNING_KEY'], "android.injected.signing.store.password" => ENV['ANDROID_APP_SIGNING_STORE_PASSWORD'], "android.injected.signing.key.alias" => ENV['ANDROID_APP_SIGNING_KEY_ALIAS'], "android.injected.signing.key.password" => ENV['ANDROID_APP_SIGNING_KEY_PASSWORD'], } )
- aab파일로 PlayStore에 게시해야하기 때문에
task: "bundle"
로 설정 - 당연히 빌드 타입은 Release
- aab파일 signing을 위해서 다음과같이 file, password, key alias, key password를 설정해주었다
ENV['']
로 되어있는건 dotenv GEM을 이용해서 signing키와 패스워드를 숨기기 위해서 사용했다
1
gem install dotenv
1 2 3 4 5 6 7 8 9 10 11
#.env 파일 # Android ANDROID_APP_SIGNING_KEY='STORE_PATH' # 실제 경로 입력 ANDROID_APP_SIGNING_STORE_PASSWORD='STORE_PASSWORD' # 실제 패스워드 입력 ANDROID_APP_SIGNING_KEY_ALIAS='ALIAS NAME' # 실제 alias 입력 ANDROID_APP_SIGNING_KEY_PASSWORD='KEY_PASSWORD' # 실제 패스워드 입력 ANDROID_APP_GOOGLE_KEY='GOOGLE_KEY' # 실제 경로 입력 ANDROID_APP_AAB_PATH='AAB_PATH' # 실제 경로 입력 # firebase FIREBASE_APP_KEY='FIREBASE_APP_KEY' # 실제 키 입력
- aab파일로 PlayStore에 게시해야하기 때문에
-
PlayStore Upload 설정
1 2 3 4 5 6 7 8 9
upload_to_play_store( track: "beta", json_key: ENV['ANDROID_APP_GOOGLE_KEY'], aab: ENV['ANDROID_APP_AAB_PATH'], skip_upload_metadata: true, skip_upload_images: true, skip_upload_screenshots: true, skip_upload_apk:true )
- track에는 production, beta, alpha, internal 을 설정해줄 수 있다
- json_key와 aab는 해당하는 파일의 경로를 맞춰서 넣어준다
- metadata, images, screenshots, apk를 skip 설정해준 이유는 기본적으로 올라가있는 기본 데이터들을 변경할 필요가 없기 때문에 업로드를 skip해준다
-
다음은 lane 실행시 넘겨받은 options값의 처리 부분이다
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
# 입력받은 버전으로 디렉토리 생성 후 apk이동 if options[:version] version = options[:version] else version = prompt(text: "Enter the specific version") end versionName = version # 해당버전 폴더 생성 후 aab, apk파일 생성 sh "mkdir -p ../../release_ant_#{versionName}_bundle" sh "java -jar $BUNDLETOOL_FILE build-apks --bundle=../app/build/outputs/bundle/release/app-release.aab --output=../../release_ant_#{versionName}_bundle/#{versionName}.apks --mode=universal" sh "mv ../app/build/outputs/bundle/release/app-release.aab ../../release_ant_#{versionName}_bundle/app-release.aab" # 입력받은 버전으로 깃 태그 푸시 git_tag(versionName)
-
원래는 배포레인을 시작하면 자동으로 version up을 시켜주려고 했으나 현재 진행하고있는 프로젝트 배포 방식과의 일원화를 위해서 자동으로 version up을 시켜주는 코드를 제외하는 대신 version을 입력받아서 처리하는 방식으로 작성했다
-
git_tag함수는 아래와 같이 작성되어있다
1 2 3 4 5
# add git tag to remote def git_tag(versionName) add_git_tag(tag: "#{versionName}") push_git_tags(tag: "#{versionName}") end
-
이제 작성해준 lane을 실행해보면
1
fastlane aab version:0.5.10a
- 입력한 버전(0.5.10a)으로 현재 브랜치의 코드를 빌드 후 playstore에 게시(설정해준 트랙에 맞춰서)
- 게시 후 입력받은 버전으로 디렉토리를 생성
- 깃 태그 푸시
- 까지의 작업이 완료된다
추가해야할 사항
- 테스트케이스 검사
- 사내 메신저로 배포 과정 발송