🍣

【Android】Github Actions + Firebase App Distribution でアプリを配信する

2022/12/23に公開約3,900字

概要

今回構築するCI/CDの全体の流れとしては以下の図のように、main ブランチへプッシュ > Github Actions のワークフロー起動 > Firebase App Distribution へ APK ファイルアップロード > アップロード完了後 Slack に通知となっています。

前準備

Firebase App Distribution にテスターを登録する

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

screenshot001

Actions secrets の設定

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

screenshot002

今回登録する環境変数は以下です。

FIREBASE_DEV_APP_ID

Firebase Console の歯車アイコン > プロジェクトの設定 > マイアプリ > アプリIDを設定します。

screenshot003

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

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

Firebase App Distribution へのアップロード

screenshot005

Slack への通知

screenshot006

screenshot007

使用した Github Action

その他

Discussion

ログインするとコメントできます