- Web Engineer
- アウトバウンド営業
- Webエンジニア(経験者)
- Other occupations (18)
- Development
- Business
【Android】GitHub ActionsからワンクリックでFirebase App Distributionにアプリをデプロイする【株式会社ライトコード】
前回は、GitHub Actionsを使ってAndroidアプリのバージョン番号(versionName
と versionCode
)を自動で更新し、プルリクエストを作成するワークフローについて解説しました。
▼ 前回の記事(まだの方はこちらからどうぞ!)
開発中では、テスターやチームメンバーに対して動作確認用としてAPKファイルを配信することが多くあると思います。
ですが、
- Android Studioで「Build > Generate Signed Bundle / APK」を選択し、
- リリース用のAPKファイルを生成し、
- Firebaseコンソールを開き、App Distributionのページに移動し、
- 先ほど生成したAPKファイルをドラッグ&ドロップし、
- リリースノートを記入して、テスターに配布する
という一連の作業、一度や二度ならまだしも、開発が活発になればなるほど、何度も繰り返すことになります。
正直面倒くさいですし、手作業が増えれば署名設定を間違えたり、アップロードするAPKを間違えたりなどのヒューマンエラーを引き起こす可能性も高くなります。
そこで今回の後編では、前編で自動化したバージョン更新の仕組みをさらに発展させ、GitHub Actionsの画面からワンクリックするだけで、バージョンアップからAPKのビルド、そしてFirebase App Distributionへのデプロイまでを全自動で行うワークフローについて解説していきます。
それでは見ていきましょう!
今回構築するワークフローの全体像
今回目指すのは、バージョンアップの種類に応じて3つのワークフローを用意し、それぞれを手動で実行できるようにします。
Deploy To App Distribution - Major
:メジャーバージョンを上げてデプロイDeploy To App Distribution - Minor
:マイナーバージョンを上げてデプロイDeploy To App Distribution - Patch
:パッチバージョンを上げてデプロイ
これらのワークフローは、GitHubのActionsタブから「Run Workflow」ボタンを押すだけで、以下の処理をすべて自動で行ってくれます。
- バージョンの更新:
build.gradle.kts
内のversionName
とversionCode
をインクリメントします。 - リリースAPKのビルド: アプリケーションをビルドし、署名付きのリリースAPKを生成します。
- Firebase App Distributionへのデプロイ: 生成されたAPKをApp Distributionにアップロードし、テスターに配布します。
- 後処理: 次のリリースに備えて、変更内容を記録したプルリクエストを作成します。
それでは、この仕組みがどのように実現されているのか、実際のGitHub Actionsのワークフローファイルを詳しく見ていきましょう。
ワークフローファイルの解説
3つのワークフロー(Major/Minor/Patch)は、更新するバージョンの種類が違うだけで、基本的な構造はほぼ同じです。
ここでは代表として、一番利用頻度が高いであろう deploy-release-apk-patch.yml
の中身を、順次解説していきます。
#/.github/workflows/deploy-release-apk-patch.yml
name: Deploy To App Distribution - Patch
on: [workflow_dispatch]
jobs:
deploy-release-apk:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
with:
ref: 'release'
- name: set up JDK 17
uses: actions/setup-java@v2
with:
java-version: '17'
distribution: 'temurin'
cache: gradle
- name: Grant Permission gradlew
run: chmod +x gradlew
- name: Make google-service.json
env:
GOOGLE_SERVICE: ${{ secrets.GOOGLE_SERVICE_JSON }}
run: echo $GOOGLE_SERVICE | base64 --decode --ignore-garbage > ./app/google-services.json
- name: Bump Patch Version
run: ./gradlew bumpPatchVersion
- name: Get Version
run: |
echo "::set-output name=VERSION_CODE::$(./gradlew -q printVersionCode)"
echo "::set-output name=VERSION_NAME::$(./gradlew -q printVersionName)"
id: version
- name: Building Release APK
env:
ENV_SIGN_KEYSTORE_BASE64: ${{ secrets.ENV_SIGN_KEYSTORE_BASE64 }}
ENV_SIGN_KEY_ALIAS: ${{ secrets.ENV_SIGN_KEY_ALIAS }}
ENV_SIGN_KEY_PASSWORD: ${{ secrets.ENV_SIGN_KEY_PASSWORD }}
ENV_SIGN_STORE_PASSWORD: ${{ secrets.ENV_SIGN_STORE_PASSWORD }}
run: ./gradlew assembleRelease
- name: Deploy to App Distribution
uses: wzieba/Firebase-Distribution-Github-Action@v1
with:
appId: ${{ secrets.FIREBASE_APP_ID }}
serviceCredentialsFileContent: ${{ secrets.CREDENTIAL_FILE_CONTENT }}
groups: release
releaseNotesFile: RELEASE_NOTE.md
file: ./app/build/outputs/apk/release/app-release.apk
- name: Init RELEASE_NOTE.md
run: cat RELEASE_NOTE.init.md > RELEASE_NOTE.md
- name: Create Pull Request
uses: peter-evans/create-pull-request@v6
with:
token: ${{ secrets.GITHUB_TOKEN }}
branch: after-released-${{ steps.version.outputs.VERSION_NAME }}-${{ steps.version.outputs.VERSION_NAME }}
base: release
title: "Released version: `${{ steps.version.outputs.VERSION_NAME }}` / `${{ steps.version.outputs.VERSION_CODE }}`"
commit-message: "Released version: `${{ steps.version.outputs.VERSION_NAME }}` / `${{ steps.version.outputs.VERSION_CODE }}`"
手動実行のトリガー設定
on: [workflow_dispatch]
workflow_dispatch
を指定することで、このワークフローはGitHubのUI(Actionsタブ)から手動で実行できるようになります。
特定のブランチへのプッシュやプルリクエストをトリガーにしないことで、開発者の任意のタイミングでデプロイを実行できる柔軟性を確保しています。
ビルド & デプロイ処理
ここから実際のデプロイ処理内容について解説していきます。
…
記事の続きは下のURLをクリック!
https://rightcode.co.jp/blogs/52546
エンジニア積極採用中です!
現在、WEBエンジニア、モバイルエンジニア、デザイナー、営業などを積極採用中です!
採用ページはこちら:https://rightcode.co.jp/recruit
社員の声や社風などを知りたい方はこちら:https://rightcode.co.jp/blogs?category=life
社長と一杯飲みながらお話しませんか?(転職者向け)
特設ページはこちら: https://rightcode.co.jp/gohan-sake-president-talk
もっとワクワクしたいあなたへ
現在、ライトコードでは「WEBエンジニア」「モバイルエンジニア」「ゲームエンジニア」、「デザイナー」「WEBディレクター」「営業」などを積極採用中です!
ライトコードは技術力に定評のある受託開発をメインにしているIT企業です。
有名WEBサービスやアプリの受託開発などの企画、開発案件が目白押しの状況です。
- もっと大きなことに挑戦したい!
- エンジニアとしてもっと成長したい!
- モダンな技術に触れたい!
現状に満足していない方は、まずは、エンジニアとしても第一線を走り続ける弊社代表と気軽にお話してみませんか?
ネット上では、ちょっとユルそうな会社に感じると思いますが(笑)、
実は技術力に定評があり、沢山の実績を残している会社ということをお伝えしたいと思っております。
- ライトコードの魅力を知っていただきたい!
- 社風や文化なども知っていただきたい!
- 技術に対して熱意のある方に入社していただきたい!
一度、【Wantedly内の弊社ページ】や【コーポレートサイト】をのぞいてみてください。
Wantedly:https://www.wantedly.com/companies/rightcode
コーポレート:https://rightcode.co.jp/