GitHubとBitriseとFirebase App Distributionを使ってCI/CD環境を構築します。
- masterからブランチを切る
- PRを出してmasterへマージ
- BitriseでAndroidアプリをビルド
- Firebase App Distributionでアプリ配布
- Slackへ通知
を回せる環境を作りたいと思います!
環境
- macOS Catalina (10.15.2 Beta)
- Android Studio 3.5.2
必要な物
brew install gibo hub
今回のアプリはBitriseの使用時間が4m52sだったので、試すだけなら無料アカウントでも大丈夫だと思います。
Androidアプリ作成
Android Studioをインストールしてプロジェクトを作成します。
今回はEmpty Activityを選択。
- Name: 好きなアプリ名
- Package name: 他のアプリと被らないようなもの。(GitHubアカウントがあれば
io.github.<username>.<app_name>とかが良いかも)
GitHubにリポジトリ作成
Android Studioでターミナルを開く。
自動でプロジェクト直下にいる状態になるので下記のコマンドを実行する。
# cd <project_root>
# gitリポジトリ初期化
git init
# Android用gitignore作成
gibo dump android > .gitignore
git add .
git commit -m "init"
GitHubへPushするとリポジトリが作成されます。
hub create -p # -pオプションつけないと公開リポジトリになる注意
# https://github.com/takagisou/BitriseFirebaseExample
git push -u origin master
# To github.com:takagisou/BitriseFirebaseExample.git
# * [new branch] master -> master
# Branch 'master' set up to track remote branch 'master' from 'origin'.
Bitrise
Dashboard ->Add New App-> Add New App on web UI でアプリを追加します。
Add New App from CLI の方はよく分かっていません。
アカウントとリポジトリの公開状態(?)を選択します。
リポジトリ選択
BitriseがリポジトリにアクセスするためのSSH keyを設定します。
とりあえず自動で設定してくれる方(No, auto-add SSH key)で大丈夫です。
ブランチ名を記入します(ここではmaster)
VALIDATINGが始まります…(多分プロジェクト構成などを元にAndroidアプリかiOSアプリかなどを判定してる)
無事Androidアプリと認識されたので各種設定を行いConfirmします。
- Module: app
- Variant: debug (多分)
アイコン設定(ここではデフォルト) -> Choose Image and Proceed
Register a Webhook for me!を選択します。
ただ今回はmasterにマージされたときにFirebase App Distributionへアップロードしたいだけなので後で設定を変更します。
We've kicked off your first test build for you!をクリックしてビルドを開始します!
ビルドが始まります!
しばらくするとビルド成功メッセージが表示されると思います! ![]()
とりあえずここまでにして次はFirebaseの設定をします。
Firebase
Firebaseコンソールからプロジェクトを追加します。
プロジェクト名は好きなプロジェクト名で大丈夫です。
このプロジェクトでGoogleアナリティクスを有効にするはFirebase App Distributionを使うだけなら有効にしなくても良いかもしれませんが、よく分かってないので有効にしてます…。
Googleアナリティクスアカウントもよく分かっていませんが適当に作成し、プロジェクトを作成をクリックします…。
App Distributionを選択しAndroidアプリを追加します。
表示される手順通りにAndroidプロジェクトにFirebaseを組み込んでいきます。
最後のステップのアプリを実行してインストールを確認は少しチェックが通りづらいような気がしました。
アプリを再度インストールしたり、ステップを行ったり来たりしてるとチェックが通ると思います。
コンソールに進むをクリックして、利用規約に同意して開始ボタンを押します。
テスターとグループを追加します。
このグループ名は後でBitriseで使用します。
招待を受けたテスターはメールの指示に従ってFirebase App Distributionアプリをインストールします。
インストール完了するとApp Testerというアプリが増えていると思います。
Firebase その2
下記をメモっておきます。
- アプリID
- Firebase token
BitriseからFirebase App Distributionへアプリをアップロードする際に使用します。
プロジェクト設定 > 全般 > アプリID
Firebase CLIをインストールして、tokenを取得します。
# インストール
$ curl -sL firebase.tools | bash # npm install -g firebase-tools
# ログイン(ブラウザが開きます)
$ firebase login
# トークン取得
$ firebase login:ci
.........
.........
.........
✔ Success! Use this token to login on a CI server:
# 下記がトークン
1//0eUwb.......................
Bitriseに戻ります。
Bitrise その2
Code Signing
Workflow > Code Signingからkeystoreファイルをアップロードします。
今回は~/.android/debug.keystoreを使用します。
よく分かっていませんでしたが、debugビルドのapkはコード署名が必要ないのでは無く、AndroidStudioが自動で生成してそれを使って署名してくれてる感じなんですね。
勉強になるなぁ…。
password(Keystore, Key両方): android
alias名: androiddebugkey
https://qiita.com/taka0125/items/c408df4061a0af49c9b3
入力したらSave metadataクリックして保存します。
Workflows
Workflowを開きます。
下記のような感じにします。
| 変更前 | 変更後 |
|---|---|
![]() |
![]() |
初期状態からいくつかWorkflowを追加しています。
Gradle Runner
最初apk書き出すWorkflow無くて焦りましたが、Gradle Runnerで書き出せました。
正しいかはよく分かりません…。
- Gradle task to run:
assembleDebug - gradlew file path:
./gradlew
と設定するとapkが書き出されるみたいです。
Android Sign
Keystoreファイルがアップロードされていていれば特に設定はいらないと思います(多分)
[BETA] Firebase App Distribution
- Firebase Token:
firebase login:ciで取得したtoken - Firebase App ID: FirebaseのダッシュボードでメモったアプリID
- Test Groups:
Firebase App Distributionで作成したグループ名
Firebase TokenはSecret Variableを追加してそれを参照するような形になると思います。
変数名は分かりやすい名前なら何でも大丈夫です。
Send a Slack message
Slack Webhook URLかAPI tokenのいずれかの指定が必要みたいです。
今回はSlack Webhook URLを使用しました。
Secret Variableを追加してSlack Webhook URLを設定します。
変数名は分かりやすいものなら何でも大丈夫です。
Bitrise その3
もう配布できる状態なのですが、このままだとPRやコミットの度Workflowが走ってしまうので、Triggersから不要な設定を削除します。
これでBitriseからFirebase App Distributionへアプリをアップロードする準備が整いました!
GitHubでPRを作ってmasterにマージしてみる
masterからブランチを切って適当な変更を加えてGitHubにpushしてPRを出します。
そうするとBitriseのビルドが走り始め…
無事ビルドが成功するとSlackに通知が来て…
端末の方にも配布されます ![]()
その他
一応masterに変更が加わったら配布してSlack通知まで構築できましたが、以下のような課題があります。
- ビルド番号が更新されていない
- リリースノートが無い
- Slackメッセージが設定されていない
BitriseのWorkflowだけで構築しましたが、fastlaneを使えばもう少し柔軟な環境が構築できそうですね。
もしかしたらBitriseだけでもできるのかもしれませんが、Bitrise全然使いこなせて無いので詳しいことはよく分かっていません…。
もっと使いこなして行きたいですね!


































