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全然使いこなせて無いので詳しいことはよく分かっていません…。
もっと使いこなして行きたいですね!