これは何?
「AndroidアプリをCircleCIでCIする。」のCircleCIをBitriseに変更した時のメモです。
Bitriseの設定のみを書いていこうと思いますので、詳細は「AndroidアプリをCircleCIでCIする。」を御覧ください。
概要
Bitrise
BitriseはCircleCIと同じ種類のクラウド型のCIサービスです。
ロンドンとブダペスト(ハンガリー)にオフィスを持っています。シリコンバレーじゃないのが新鮮でした。
できること
BitriseはiOS、Android、Swift、React Nativeをビルド、テスト、デプロイすることが可能です。本記事では、Androidのビルド、テストをみていきます。
価格
詳しいテーブルはこちらです。小さな組織向けとエンタープライズ向けが用意されてます。 小さな組織向けの1部はこんな感です。(2019年7月現在)
- Hobby(無料):複数同時ビルドは不可、ビルド時間は10分、月に200回ビルドまで、使えるのは標準マシーン、追加可能なメンバーは2名
- Developer($36/mo):複数同時ビルドは不可、ビルド時間は45分、ビルド回数は無制限、使えるのは標準マシーン、メンバーの無制限追加可能
さっそく使ってみる
GitHubとBitriseのアカウントが必須ですのでご用意してください。
この記事ではこのリポジトリのコードをサンプルとして使いますので、
ForkもしくはCloneしてリポジトリに追加しておいてください。
それでは追加していきます。
アプリを追加する
下右図のように、ターゲットになるリポジトリを指定してアプリを追加します。


Workflowの設定画面を表示する
アプリの追加が完了すると同時にビルドを走らせてくれます。
が、取り急ぎWorkflowの設定画面を開いてしまいます。プロジェクト名をクリック(下図(1))して
次にWorkflowのタブをクリック(下図(2))して表示します。

タスクを追加する
アプリを追加した状態ではUIテストは追加されませんので、UIテストされるように設定する必要があります。 追加するタスクは以下の2つです。
- Gradle Runner
- [BETA] Virtual Device Testing for Android
赤四角の中の2つを追加する。

> Gradle Runnerの追加
Android Unit Test のアイコンの直下にある「+」ボタン(下図(1))をクリックして、「Gradle Runner」で検索すると絞込まれて表示されますので クリックして追加します。(下図(2))

追加すると設定画面が表示されますので以下の2つの四角を変更します。
- Gradle task to run :
assembleDebug assembleDebugAndroidTest
- gradlew file path :
./gradlew

> [BETA] Virtual Device Testing for Androidの追加
先程追加したGradle Runner の次に追加しますので、直下にある「+」ボタン(下図(1))をクリックして、「[BETA] Virtual」で検索します。すると絞込まれて表示されますので クリックして追加します。(下図(2))

追加すると設定画面が表示されますので以下の2つの四角を変更します。
- Test devices :
Pixel2,28,en,portrait
- Test type :
instrumentation

なお、Test devices はサンプルアプリに minSdkVersion 26
と指定しているので26以上に設定しています。
また、先程変更した Gradle Runner の Gradle task to run の assembleDebug assembleDebugAndroidTest
がデフォルトの assemble
のままになっていると
テスト用のAPK(app-debug-androidTest.apk
)が作成されず、API path で使う環境変数の $BITRISE_APK_PATH に app-release-unsigned.apk
等に指定あれてしまい
[BETA] Virtual Device Testing for Android が動作できずエラーになりますので、確実に変更するようにしてください。
ちなみに、この [BETA] Virtual Device Testing for Android は「Firebase Test LabでUI Testを実行する」 でも紹介しているのと同じくGCPコマンドから Cloud Testing API(Firebase Test Lab) をラップして使っているようです。
実行する
以上でUI Testまで実行できるようになったはずなので画面内にある [Start/Schedule a Build] ボタンをクリックしてビルドを実行します。

おわりに
ガガっとリポジトリを読んで、設定作ってくれるところは楽チンでよかったですが、 Gradle Runner の Gradle task to run 環境変数 $BITRISE_APK_PATH の設定で ハマりました。Firebase Test Labからのエラーメッセージ見られると良いかもな〜、と感じています。
今回のbitrise.yml
今回できあがった bitrise.yml
もココに貼っておきます。参考になれば幸いです。
---
format_version: '8'
default_step_lib_source: https://github.com/bitrise-io/bitrise-steplib.git
project_type: android
trigger_map:
- push_branch: "*"
workflow: primary
- pull_request_source_branch: "*"
workflow: primary
workflows:
deploy:
steps:
- [email protected]:
- [email protected]: {}
- [email protected]: {}
- [email protected]:
title: Do anything with Script step
- [email protected]:
inputs:
- gradlew_path: "$PROJECT_LOCATION/gradlew"
- [email protected]:
inputs:
- build_gradle_path: "$PROJECT_LOCATION/$MODULE/build.gradle"
- [email protected]:
inputs:
- project_location: "$PROJECT_LOCATION"
- module: "$MODULE"
- variant: "$VARIANT"
- [email protected]:
inputs:
- project_location: "$PROJECT_LOCATION"
- module: "$MODULE"
- variant: "$VARIANT"
- [email protected]:
inputs:
- project_location: "$PROJECT_LOCATION"
- module: "$MODULE"
- variant: "$VARIANT"
- [email protected]:
- [email protected]: {}
- [email protected]: {}
primary:
steps:
- [email protected]:
- [email protected]: {}
- [email protected]: {}
- [email protected]:
title: Do anything with Script step
- [email protected]:
inputs:
- gradlew_path: "$PROJECT_LOCATION/gradlew"
- [email protected]:
inputs:
- project_location: "$PROJECT_LOCATION"
- module: "$MODULE"
- variant: "$VARIANT"
- [email protected]:
inputs:
- project_location: "$PROJECT_LOCATION"
- module: "$MODULE"
- variant: "$VARIANT"
- [email protected]:
inputs:
- gradlew_path: "./gradlew"
- gradle_task: assembleDebug assembleDebugAndroidTest
- [email protected]:
inputs:
- test_type: instrumentation
- test_devices: Pixel2,28,en,portrait
- [email protected]: {}
- [email protected]: {}
app:
envs:
- opts:
is_expand: false
PROJECT_LOCATION: "."
- opts:
is_expand: false
MODULE: app
- opts:
is_expand: false
VARIANT: ''