🍣
【Android】Github Actions + Firebase App Distribution でアプリを配信する
配信までの流れ
- main ブランチへプッシュ
- Github Actions のワークフロー起動
- Firebase App Distribution へ apk アップロード
- アップロード完了後 Slack に通知

セットアップ
Firebase App Distribution にテスターを登録する
Firebase Consoleサイドバーのプロダクトのカテゴリ > リリースとモニタリング > App Distribution > テスターとグループ > グループを追加からグループとテスターを登録します(例としてグループをdeveloperにしています)

Actions secrets の設定
Github のSettings > Security > Actions > New Repository SecretからGithub Actionsで使用する環境変数を登録します。

今回登録する環境変数は以下です。
FIREBASE_DEV_APP_ID
Firebase Console の歯車アイコン > プロジェクトの設定 > マイアプリ > アプリIDを設定します。

CREDENTIAL_FILE_CONTENT
以下を参考にGoogle Cloud Platformからサービスアカウントキーを取得します。
Guide 2 - the same but with screenshots
取得したJsonファイルの中身をコピーして設定します。
※8. Select type JSON and click Createで取得したJsonファイルは同じものを再取得できないため、大切に保管します。
SLACK_WEBHOOK_URL
SlackのIncoming Webhook URLを設定します。
ワークフローの実装
プロジェクトのルートディレクトリに.github/workflows/ディレクトリを作成し、YAMLファイルを作成します。例としてstaging.yamlとしています。
staging.yaml
name: Beta Android
on:
push:
branches:
- 'main'
workflow_dispatch:
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Cache Gradle
uses: actions/cache@v2
with:
path: |
~/.gradle/caches
~/.gradle/wrapper
key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*') }}
restore-keys: |
${{ runner.os }}-gradle-
- name: Set Up JDK 11
uses: actions/setup-java@v2
with:
distribution: 'zulu'
java-version: '11'
- name: Build With Gradle
run: ./gradlew assembleDebug
- name: Deploy To Firebase App Distribution
uses: wzieba/Firebase-Distribution-Github-Action@v1
with:
appId: ${{ secrets.FIREBASE_DEV_APP_ID }}
serviceCredentialsFileContent: ${{ secrets.CREDENTIAL_FILE_CONTENT }}
groups: developer
file: app/build/outputs/apk/debug/app-debug.apk
notice:
if: always()
needs: deploy
name: Slack Notification
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: technote-space/workflow-conclusion-action@v1
- name: Slack Notification
uses: rtCamp/action-slack-notify@v2
env:
SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK_URL }}
SLACK_CHANNEL: fishing-unit-converter
SLACK_USERNAME: Firebase App Distribution
SLACK_COLOR: ${{ env.WORKFLOW_CONCLUSION }}
SLACK_ICON_EMOJI: ':firebase-app-distribution:'
SLACK_MESSAGE: ${{ (env.WORKFLOW_CONCLUSION == 'success' && ':heads-down: ベータ版がリリースされました!') || ':boom: リリースに失敗しました!' }}
mainブランチへのプッシュ、または、Run workflowを使いワークフローが正常終了すると、Firebase App Distribution・Slackではそれぞれ以下のように表示されます。
Firebase App Distribution へのアップロード

Slack への通知


Discussion