ひだまりソケットは壊れない

ソフトウェア開発に関する話を書きます。 最近は主に Android アプリ、Windows アプリ (UWP アプリ)、Java 関係です。

まじめなことを書くつもりでやっています。 適当なことは 「一角獣は夜に啼く」 に書いています。

Jenkins 上で Android アプリのテストを実行する方法 (Gradle 使用)

最近 Jenkins 上で Android アプリのテストを実行できるようにしたので軽くメモしておきます。

Jenkins実践入門 ?ビルド・テスト・デプロイを自動化する技術 (WEB+DB PRESS plus)

Jenkins実践入門 ?ビルド・テスト・デプロイを自動化する技術 (WEB+DB PRESS plus)

更新履歴

  • 2014-03-25: Android Gradle plugin 0.9.0 でテストのタスク名が変更されたことに合わせて内容を変更しました。

前提

Gradle ラッパーは別にリポジトリに入れてなくてもいいですが、入れておくとシェルスクリプトでテストを実行できるので便利です。

手元でのテスト実行

Jenkins 上でテストする前に、まず手元でテストを実行できるようにしておく必要があります。 *1

./gradlew connectedAndroidTest

# 注意: Android Gradle plugin 0.9.0 よりも古いバージョンを使っている場合は次のコマンドです
./gradlew connectedInstrumentTest

上記コマンドによりテストが実行されるようにしておいてください。 接続されている Android 端末 (エミュレータも可) を使ってテストが実行されます。

Android SDK のサンプルの中にテストのプロジェクトがあるので、それも参考になります。

Jenkins 上でのテスト実行

Jenkins 上で Android アプリのテストを実行するには、次が必要となります。

  • Jenkins 上でのテスト実行時に Android エミュレータが起動するようにする
  • テスト実行 (ビルド) に必要な Android SDK を Jenkins 上にインストール

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 SDKJava 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 サービスを再起動したらうまくいくはずです。

*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:ここら辺あんまりわかってないので違うかもしれません。