GithubActionsへのAppDistributionの導入
GithubActionsにAppDistributionを導入してみたので、その手順を纏めようと思います。
公式ドキュメントは以下です。
前提として、FirebaseとAndroidプロジェクトの連携は済んでいる状態とします。
AppDistributionの有効化
単純なことですが、FirebaseConsoleからAppDistributionを有効化します。
あまり気にすることも無いと思いますが、これをやっておかないと最後に実行した時にErrorになります。
FirebaseTokenの取得
CI上からAppDistributionでの配布を実行するために、Tokenを取得します。
取得方法は公式ドキュメント的に3通り紹介されています。
今回はFirebaseへのアクセス権がある開発者でTokenを取得しようと思いますので、サービスアカウントを使用する方法以外の2種類を紹介します。 この場合、開発者が変わる場合にはTokenの見直しが必要になると思いますので、ご注意を。
gradleコマンドで取得する方法
gradleで以下の様に設定を加えます。
- project-root/build.gradle
buildscript {
dependencies {
classpath 'com.google.firebase:firebase-appdistribution-gradle:2.0.1'
}
}
- project-root/app/build.gradle
apply plugin: 'com.google.firebase.appdistribution'
続いて以下のコマンドを実行します。
./gradlew appDistributionLogin
実行すると認証のためのURLが出力されるので、ログインすればTokenが発行されます。
FirebaseCLIで取得する方法
何れかの方法でFirebaseCLIをローカル環境にインストールして、以下のコマンドを実行します。
$ firebase login
実行すると即ブラウザでログインを求められるので、gradleの場合同様にログインすればTokenが発行されます。
環境変数へのTokenの登録
CI環境から取得したTokenを使用できるように、環境変数に登録します。 登録すべきTokenは先程取得したFirebaseTokenの他、FirebaseのアプリIDも必要になります。
アプリIDは以下の箇所で参照できます。
GithubActions用に登録するには、Githubのリポジトリで、Setting→Secretから行えます。
配布Actionの設定
Actionがありますので、これを使わせて頂きます。 配布するapkをBuild後、Actionを実行する手順を書けばOKです。
- name: Builed Apk run: | ./gradlew assembleProductionRelease - name: upload artifact to Firebase App Distribution uses: wzieba/Firebase-Distribution-Github-Action@v1 with: appId: ${{secrets.FIREBASE_APP_ID}} # Githubに保存した環境変数 token: ${{secrets.FIREBASE_TOKEN}} # Githubに保存した環境変数 groups: android-developer # テスターグループ名 file: app/build/outputs/apk/production/Release/app-production-Release.apk
後は上記のAction中にもあるように、テスターグループをFirebaseConsole上で設定して実行すれば完了です。
テスターグループについて
配布先はグループ毎に指定出来ます。このグループの作成はFirebaseConsole上で可能です。
Action内で指定するテスターグループ名は、グループ名横のaliasになります。
テスターの登録
テスターはConsole上で直接アドレスを登録するか、招待リンクを作成してテスター側に登録してもらう事が出来ます
後は登録時もしくは配布時に送られてくるメールからDistributionのページを開くか、メールのリンクにあるテスターアプリをインストールすれば使用できます。
その他の配布方法
gradleコマンドでの実行
gradleに予め設定を書いておけば、gradleコマンドでAppDistributionでの配布を行うことも出来ます。
前述のgradleでのTokenの取得はこの設定のついでに出来ますので、gradleコマンドで配布する場合はそちらも合わせて行うと良いと思います。 (あまり利点は無いと思いますが、GithubActionsからgradleコマンドを叩いてもできるはずです。)
CircleCIでの配布
これは自分で試していないので調べた限りの話になりますが、CircleCIの場合、その内部だけで設定を完結させようとすると、FirebaseCLIやfastlane等を環境上に導入するなど、ひと手間必要になりそうです。
セキュリティ上問題がなければ、上記のgradleコマンドを直接叩く手順をCIに加えてしまうことも選択肢に入れて良いと思いました。