Jenkins 上で Android アプリのテストを実行する方法 (Gradle 使用)
最近 Jenkins 上で Android アプリのテストを実行できるようにしたので軽くメモしておきます。
Jenkins実践入門 ?ビルド・テスト・デプロイを自動化する技術 (WEB+DB PRESS plus)
- 作者: 佐藤聖規,和田貴久,河村雅人,米沢弘樹,山岸啓,川口耕介
- 出版社/メーカー: 技術評論社
- 発売日: 2011/11/11
- メディア: 単行本(ソフトカバー)
- 購入: 26人 クリック: 496回
- この商品を含むブログ (62件) を見る
更新履歴
- 2014-03-25: Android Gradle plugin 0.9.0 でテストのタスク名が変更されたことに合わせて内容を変更しました。
前提
- Android アプリのビルドには Gradle を使用している (参考: Gradle Plugin User Guide - Android Tools Project Site)
- アプリのリポジトリに Gradle ラッパー を入れている
Gradle ラッパーは別にリポジトリに入れてなくてもいいですが、入れておくとシェルスクリプトでテストを実行できるので便利です。
手元でのテスト実行
Jenkins 上でテストする前に、まず手元でテストを実行できるようにしておく必要があります。 *1
./gradlew connectedAndroidTest # 注意: Android Gradle plugin 0.9.0 よりも古いバージョンを使っている場合は次のコマンドです ./gradlew connectedInstrumentTest
上記コマンドによりテストが実行されるようにしておいてください。 接続されている Android 端末 (エミュレータも可) を使ってテストが実行されます。
- 参考ページ
- テストに関する公式ドキュメント: Testing | Android Developers
- Gradle の Android プラグインのドキュメント: Gradle Plugin User Guide - Android Tools Project Site
Jenkins 上でのテスト実行
Jenkins 上で Android アプリのテストを実行するには、次が必要となります。
Android エミュレータの起動には、Jenkins のプラグイン Android Emulator Plugin を使用します。 また、このプラグインが Android SDK のインストールも行いますので、ビルドの際にはその SDK を使用するようにしておくと良いでしょう。
Android Emulator Plugin のインストール
Jenkins で Android Emulator Plugin をインストールするのは簡単で、「Jenkin の管理」 ページから 「プラグインの管理」 ページに行き、「利用可能」 タブで 「Android Emulator Plugin」 を選択してインストールするだけです *2。
テスト実行のために必要な設定
テスト実行用のジョブを作ったら、ジョブの設定で以下のことを行います。
- Jenkins のジョブ実行時に Android エミュレータを起動するようにする (「Run an Android emulator during build」 の設定項目)
- 「高度な設定」 を開いて 「Show emulator window」 のチェックを外すこと
- ビルド手順として 「シェルの実行」 を追加し、中身を 「./gradlew connectedAndroidTest」 とする *3
- ビルド後の処理として 「JUnit テスト結果の集計」 を追加し、パスとして 「**/build/androidTest-results/connected/*.xml」 と入力する *4
多分これだけでテストが実行されると思います。 環境変数 ANDROID_HOME
には Android Emulator Plugin が使用する Android SDK のパスが設定されているらしいので、自分で ANDROID_HOME
などの設定をする必要はないはずです。
Android SDK build-tool のインストールが必要な場合
ただし、ビルドに使用する Android SDK build-tool のバージョンがインストールされていない場合は次のようなエラーが発生してしまうので、Android Emulator Plugin によってインストールされた Android SDK のディレクトリに行って、Android SDK build-tool をインストールする必要があるかもしれません。 (/var/lib/jenkins/tools/android-sdk/tools/android update sdk -u -a -t platform-tool,tool
みたいなコマンド *5 ですかね。) *6
FAILURE: Build failed with an exception.
* What went wrong:
Execution failed for task ':modules:volley:compileReleaseAidl'.
> failed to find Build Tools revision 19.0.3
【追記】 上のようなエラーの場合は、/var/lib/jenkins/tools/android-sdk/tools/android update sdk -u -a -t build-tools-19.0.3
というコマンドでビルドツールをインストールすれば良さそうです。 (参考: Android-Jenkins: failed to find Build Tools revision 17.0.0 On Jenkins Build Server - Stack Overflow)
Windows でのはまりどころ
Windows 上に Jenkins をインストールして使っている場合、Jenkins はローカルシステムアカウントで動いていると思います。 しかし、この状態では Android SDK が Java SDK を見つけるのに失敗するなどの問題があります。
ビルドします。 ワークスペース: C:\Program Files (x86)\Jenkins\jobs\build-android-app\workspace
$ C:/Users/nobuoka/AppData/Local/Android/android-studio/sdk/tools/android.bat list target
'C:\Windows\system32\java.exe' は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。
無効なパスの指定です
指定されたパスが見つかりません。
指定されたパスが見つかりません。
指定されたパスが見つかりません。
そのため、Windows 上の Jenkins で Android アプリのテストを実行する場合は、実際のユーザーアカウントで Jenkins を動かす必要があります。 Windows 8 では、タスクマネージャの 「サービス」 タブの項目一覧の適当な場所を右クリックして 「サービス管理ツールを開く」 を選んでサービス管理ツールを開き、Jenkins のサービスのプロパティを開いて 「ログオン」 タブで通常ユーザーのアカウントを入力します。 これで Jenkins サービスを再起動したらうまくいくはずです。
参考文献
- Androidアプリ開発テスト入門(6):JenkinsでCI(継続的インテグレーション)すればAndroidアプリ開発はもう怖くない (1/2) - @IT (Gradle じゃなくて Ant を使ったテスト実行)
- numa08 エンジニア風な日記: JenkinsでAndroidのユニットテスト+リリースビルドまで自動化 (Gradle じゃなくて Ant を使ったテスト実行)
*1:Android アプリのテストについてはそのうち別エントリで書こうと思いますが、ここでは詳しくは説明しません。
*2:多分 Jenkins の再起動が必要です。
*3:Android Gradle plugin 0.9.0 よりも古いバージョンを使用する場合は 「./gradlew connectedInstrumentTest」 です
*4:Android Gradle plugin 0.9.0 よりも古いバージョンを使用する場合は 「**/build/instrumentTest-results/connected/*.xml」 です
*5:Linux におけるデフォルトのディレクトリ配置の場合?
*6:ここら辺あんまりわかってないので違うかもしれません。