Androidアプリをcodemagic.yamlでFirebase App Distributionにデプロイする
はじめに
- Codemagicのymlファイルを使ってAndroidアプリをFirebase App DistributionにPublishできるまでを書き留めたメモになります
- 大まかな流れ
- 事前準備
- Codemagic上でビルド確認やトリガー設定
- サービスアカウントによる認証を元にPublish
参考記事
Android用継続的インテグレーション&デリバリー(CI/CD) | Codemagic Blog
↑こちらの記事を参考に進めていきたいと思います。
また、事前にCodemagicのAppに対象のAndroidプロジェクトを追加している前提で進めていきます.
環境構築や準備
1. 事前準備
1-1. Firebase App Distribution にテスターとグループを設定する
今回は「テスターとグループ」で「Developer」というグループを作成し、新規リリースがあれば通知されるようにしたいと思います。
※ 初めての場合は「 開始」をクリックすると↑の画面表示されるはずです。
buildTypes
と productFlavors
1-2. 今回デプロイを行う buildTypes
と productFlavors
構成は以下を想定してます。
// app/build.gradle.kts
android {
// ...
flavorDimensions += "default"
productFlavors {
create("dev") {
signingConfig = signingConfigs.getByName("dev") // signingConfig指定済み
isDefault = true
applicationIdSuffix = ".dev"
dimension = "default"
}
}
buildTypes {
release {
isMinifyEnabled = false
proguardFiles(
getDefaultProguardFile("proguard-android-optimize.txt"),
"proguard-rules.pro"
)
}
}
}
CIビルド
1. テストとビルドを行うシンプルなワークフロー
まずはシンプルなワークフローを作成します。以下内容で codemagic.yaml
をプロジェクト直下に作成します。
workflows:
build-dev-android-workflow:
name: Build Dev Android Workflow
max_build_duration: 60
instance_type: mac_mini_m1
environment:
groups:
- setup # JAVA_HOMEの変更など必要があれば(詳細はトラブルシューティング参照)
scripts:
- name: Run tests
script: ./gradlew test
- name: Build devRelease
script: ./gradlew assembleDevRelease
artifacts:
- app/build/outputs/apk/**/*.apk
コミットしたら早速pushします。
1-1. 手動でビルド
PushしたらCodemagicのダッシュボードを確認すると対象のプロジェクトで、「Start your first build」ができるようになっているかと思います。
赤枠を必要に応じて設定し、「Start new build」でビルドを開始します。
ビルドが成功すればOKです!
1-2. 特定のbranchにpushされたらビルドされる様にする
https://docs.codemagic.io/yaml-running-builds/starting-builds-automatically/
↑を参考に以下を追加します。この場合だと develop
ブランチにpushされたらビルドが走るようになります。
triggering:
events:
- push
branch_patterns:
- pattern: "develop"
include: true
source: true
Firebase App DistributionへPublish
サービスアカウントによる認証
Firebaseのダッシュボードから歯車アイコン > サービスアカウント > N個のサービスアカウント をクリックします。
GCPの画面が開いたら左メニューの「サービスアカウント」を選択し、上部メニューの「サービスアカウントを作成」 からサービスアカウントの詳細を入力し、「作成して続行」をクリックします。
次に「ロールを選択」で「Firebase App Distribution Admin SDK サービスエージェント」を選択します。
最後は何も入力せず「完了」をクリックします。
次に作成したサービスアカウントのメニューから「鍵を管理」をクリックします。
「鍵を追加」>「新しい鍵を作成」からキーのタイプ「JSON」で「作成」をクリックします。ダウンロードされたJSONファイルはこの後使うので適切な場所で管理します。
Codemagicの環境変数設定
先ほどダウンロードしたJSONファイルをクリップボードにコピーします。
cat xxxxxxxxx.json | pbcopy
Codemagicの対象のアプリの設定「Environment variables」タブで新規に FIREBASE_SERVICE_ACCOUNT
という環境変数を追加します。
値は先ほどクリップボードにコピーした内容を貼り付けます。
最後に codemagic.yaml
に以下を追加しPushします。
publishing:
firebase:
firebase_service_account: $FIREBASE_SERVICE_ACCOUNT
android:
app_id: $ANDROID_APP_ID
groups:
- Developer
Firebase App Distribution で以下の様にアプリがリリースされていれば成功です!
トラブルシューティング
Android Gradle plugin requires Java 17 to run. You are currently using Java 11.
が発生する!
エラーの詳細
* What went wrong:
An exception occurred applying plugin request [id: 'com.android.application', version: '8.1.1']
> Failed to apply plugin 'com.android.internal.application'.
> Android Gradle plugin requires Java 17 to run. You are currently using Java 11.
Your current JDK is located in /Library/Java/JavaVirtualMachines/zulu-11.jdk/Contents/Home
You can try some of the following options:
- changing the IDE settings.
- changing the JAVA_HOME environment variable.
- changing `org.gradle.java.home` in `gradle.properties`.
解決方法
Java 17
の JAVA_HOME
の場所がこちらに載っています。
↑を参考にCodemagicの対象アプリの設定画面から「Environment variables」を選択し、以下を追加してやります。
Name: JAVA_HOME
Value: /Library/Java/JavaVirtualMachines/zulu-17.jdk/Contents/Home
Variable group: setup (groupは必要に応じて変更して設定)
Publishing時に以下エラーが発生する
Authenticating with `--token` is deprecated and will be removed in a future major version of `firebase-tools`. Instead, use a service account key with `GOOGLE_APPLICATION_CREDENTIALS`:
現在 firebase_token
は使えないので firebase_service_account
を使う必要がある。
Discussion