🍣
【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
ではそれぞれ以下のように表示されます。
Discussion