13
13

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Android Advent Calendar 2019

Day 5

GitHub / Bitrise / Firebase App DistributionでCI/CD環境を構築する

Last updated at Posted at 2019-12-04

GitHubBitriseFirebase App Distributionを使ってCI/CD環境を構築します。

  • masterからブランチを切る
  • PRを出してmasterへマージ
  • BitriseでAndroidアプリをビルド
  • Firebase App Distributionでアプリ配布
  • Slackへ通知

を回せる環境を作りたいと思います!

環境

  • macOS Catalina (10.15.2 Beta)
  • Android Studio 3.5.2

必要な物

  • GitHubアカウント
  • Bitriseアカウント
  • Firebaseアカウント
  • Homebrew
  • gibo
  • hub
brew install gibo hub

今回のアプリはBitriseの使用時間が4m52sだったので、試すだけなら無料アカウントでも大丈夫だと思います。

Androidアプリ作成

Android Studioをインストールしてプロジェクトを作成します。

android.png

今回はEmpty Activityを選択。

android2.png

  • Name: 好きなアプリ名
  • Package name: 他のアプリと被らないようなもの。(GitHubアカウントがあればio.github.<username>.<app_name>とかが良いかも)

android3.png

GitHubにリポジトリ作成

Android Studioでターミナルを開く。

android4.png

自動でプロジェクト直下にいる状態になるので下記のコマンドを実行する。

# 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 の方はよく分かっていません。

bitrise2.png

アカウントとリポジトリの公開状態(?)を選択します。

bitrise3.png

リポジトリ選択

bitrise4.png

BitriseがリポジトリにアクセスするためのSSH keyを設定します。
とりあえず自動で設定してくれる方(No, auto-add SSH key)で大丈夫です。

bitrise5.png

ブランチ名を記入します(ここではmaster)

bitrise6.png

VALIDATINGが始まります…(多分プロジェクト構成などを元にAndroidアプリかiOSアプリかなどを判定してる)

bitrise7.png

無事Androidアプリと認識されたので各種設定を行いConfirmします。

  • Module: app
  • Variant: debug (多分)

bitrise8.png

アイコン設定(ここではデフォルト) -> Choose Image and Proceed

bitrise9.png

Register a Webhook for me!を選択します。
ただ今回はmasterにマージされたときにFirebase App Distributionへアップロードしたいだけなので後で設定を変更します。

bitrise10.png

We've kicked off your first test build for you!をクリックしてビルドを開始します!

bitrise11.png

ビルドが始まります!

bitrise12.png

しばらくするとビルド成功メッセージが表示されると思います! :tada:

bitrise12.png

とりあえずここまでにして次はFirebaseの設定をします。

Firebase

Firebaseコンソールからプロジェクトを追加します。

firebase.png

プロジェクト名は好きなプロジェクト名で大丈夫です。

Firebase2.png

このプロジェクトでGoogleアナリティクスを有効にするFirebase App Distributionを使うだけなら有効にしなくても良いかもしれませんが、よく分かってないので有効にしてます…。

firebase3.png

Googleアナリティクスアカウントもよく分かっていませんが適当に作成し、プロジェクトを作成をクリックします…。

firebase4.png

App Distributionを選択しAndroidアプリを追加します。

app.png

表示される手順通りにAndroidプロジェクトにFirebaseを組み込んでいきます。
最後のステップのアプリを実行してインストールを確認は少しチェックが通りづらいような気がしました。
アプリを再度インストールしたり、ステップを行ったり来たりしてるとチェックが通ると思います。

app2.png

コンソールに進むをクリックして、利用規約に同意して開始ボタンを押します。

テスターとグループを追加します。
このグループ名は後でBitriseで使用します。

app5.png

招待を受けたテスターはメールの指示に従ってFirebase App Distributionアプリをインストールします。

インストール完了するとApp Testerというアプリが増えていると思います。

App Tester

Firebase その2

下記をメモっておきます。

  • アプリID
  • Firebase token

BitriseからFirebase App Distributionへアプリをアップロードする際に使用します。

プロジェクト設定 > 全般 > アプリID

bitapp.png

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が自動で生成してそれを使って署名してくれてる感じなんですね。

勉強になるなぁ…。

keystore.png

password(Keystore, Key両方): android
alias名: androiddebugkey
https://qiita.com/taka0125/items/c408df4061a0af49c9b3

入力したらSave metadataクリックして保存します。

metadata.png

Workflows

Workflowを開きます。

下記のような感じにします。

変更前 変更後
before after

初期状態からいくつかWorkflowを追加しています。

Gradle Runner

最初apk書き出すWorkflow無くて焦りましたが、Gradle Runnerで書き出せました。
正しいかはよく分かりません…。

  • Gradle task to run: assembleDebug
  • gradlew file path: ./gradlew

と設定するとapkが書き出されるみたいです。

gradle.png

Android Sign

Keystoreファイルがアップロードされていていれば特に設定はいらないと思います(多分)

[BETA] Firebase App Distribution

  • Firebase Token: firebase login:ciで取得したtoken
  • Firebase App ID: FirebaseのダッシュボードでメモったアプリID
  • Test Groups: Firebase App Distributionで作成したグループ名

Firebase TokenSecret Variableを追加してそれを参照するような形になると思います。
変数名は分かりやすい名前なら何でも大丈夫です。

secrets.png

token2.png

Send a Slack message

Slack Webhook URLAPI tokenのいずれかの指定が必要みたいです。
今回はSlack Webhook URLを使用しました。

Secret Variableを追加してSlack Webhook URLを設定します。
変数名は分かりやすいものなら何でも大丈夫です。

Bitrise その3

もう配布できる状態なのですが、このままだとPRやコミットの度Workflowが走ってしまうので、Triggersから不要な設定を削除します。

triggers.png

これでBitriseからFirebase App Distributionへアプリをアップロードする準備が整いました!

GitHubでPRを作ってmasterにマージしてみる

masterからブランチを切って適当な変更を加えてGitHubにpushしてPRを出します。

github.png

そうするとBitriseのビルドが走り始め…

bitrise.png

無事ビルドが成功するとSlackに通知が来て…

slack.png

端末の方にも配布されます :tada:

android_app_distribution

その他

一応masterに変更が加わったら配布してSlack通知まで構築できましたが、以下のような課題があります。

  • ビルド番号が更新されていない
  • リリースノートが無い
  • Slackメッセージが設定されていない

BitriseWorkflowだけで構築しましたが、fastlaneを使えばもう少し柔軟な環境が構築できそうですね。

もしかしたらBitriseだけでもできるのかもしれませんが、Bitrise全然使いこなせて無いので詳しいことはよく分かっていません…。

もっと使いこなして行きたいですね!

13
13
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13
13

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?