Android

JenkinsにAndroidアプリのテスト環境を構築する その2

More than 5 years have passed since last update.

ということで、前回のつづき。Androidアプリの自動ビルド&テストに必要なJenkinsの設定を行う。

Jenkinsプラグインのインストール

以下のプラグインをインストールする。ここでインストールするのは次の3つ。トップのメニューから「Jenkinsの管理」 > 「プラグインの管理」 でインストールする。

  • Jenkins Git Plugin
  • Android Emulator Plugin
  • Jenkins Multiple SCMs plugin

インストールが終わったら、jenkins再起動しておいてもよいかもね。

プラグインの設定

プラグインの設定を行う。設定は、トップメニューから「Jenkinsの管理」 > 「Jenkinsの設定」に入って行う。

Andoid SDK
Android SDK

JDK
JDK

Git
Git

Ant
Ant

Git plugin
Git plugin

プロジェクトを新規作成する

ここでようやくJenkinsのプロジェクトを新規に作成する。今回は、様々な環境(Androidのバージョンとか解像度など)でビルド&テストしたいので、「マルチ構成プロジェクトのビルド」を選択する。プロジェクト名は、適当につけておく。

マルチ構成プロジェクトのビルド(アプリ側)

プロジェクトの設定

プロジェクトの設定を行う。設定するリポジトリは、アプリのリポジトリ、テストコードのリポジトリの2つを設定する。最初に、Androidアプリのリポジトリの設定から。

Multiple SCMsを選択して、Add SCMからGitを選択する。つぎに、リポジトリ URLを「git@bitbucket.org:/<アカウント名>/<リポジトリ名>」で設定する。そして、2つある"高度な設定"ボタンのうち、下のボタンを押す。いくつか項目が増えるが、そこで「Local subdirectory for repo(optional)」と「Unique SCM name(optional)」に記入する。ここではどちらもリポジトリ名を設定した。他はデフォルトのままで。

Multi SCMsの高度な設定(アプリ側)

次にテストコードのリポジトリを設定する。設定方法は、先のアプリの事例と同じ。「Local subdirectory for repo(optional)」と「Unique SCM name(optional)」は、アプリのリポジトリ側で設定した名称と異なる名称を付けること。

マルチ構成プロジェクトのビルド(テスト側)

Multi SCMsの高度な設定(テスト側)

ビルド・トリガの設定

定期的にリポジトリの取得~ビルド、テストまでを行う設定ができる。ここでは、30分おきにビルドするように設定した。

ビルド・トリガの設定

マトリックスの設定

テストしたいAndroidのバージョン、画面解像度、ピクセルの密度を設定する。Jenkinsでは、これらを組み合わせてビルドすることが可能。組み合わせを指定したい場合は、組み合わせフィルターで指定する事が可能。指定しない場合は、すべての組み合わせが実行される。

軸の追加ボタンを押して、ユーザー定義を選択すると、名前と値を入力する項目がでてくる。あとは、名前と値を入力する。値で複数のパラメータを指定する場合は、パラメータの間にはスペースを入れること。

今回設定した項目は、OS(Androidのバージョン), display(画面解像度)、density(ピクセル密度)の3つ。

あと「各設定を順次起動」にチェックを入れる。これで時間はかかるが1つづビルドされるようになる。これを設定するのは、Android emulatorが同時に複数起動できないため(デフォルトだと、2つのアプリを同時にテストしようとして、片方がテストに失敗することがある)

マトリックスの設定

ビルド環境

Androidアプリをビルドする環境を設定する。ここでは、先のマトリックスの設定からパラメータを取り出して設定しているので、こんな感じになる。ここで重要なのは「Show emulator window」のチェックを外すこと。Ubuntu Serverだとハマるらしい。

ビルドの設定

ビルド

ビルドの設定を行う。ここでは、antで必要なbuild.xmlを生成してからビルドするようにしている。

最初に「シェルの実行」を追加して、以下のスクリプトを追加する。

cd ${WORKSPACE}
export PATH=$PATH:/var/lib/jenkins/android-sdk/tools:/usr/bin

echo UPDATE PROJECT
android update project -p ./jenkins_smpapp1
echo UPDATE TEST PROJECT
android update test-project -m ../jenkins_smpapp1 -p ./jenkins_smpapp1test

アプリをビルドするために、「Antの呼び出し」を追加する。上の「Antの呼び出し」は、通常のアプリのビルド、インストールのため。下の「Antの呼び出し」はテストのためのもの。

Antの呼び出し

とりあえず、ここまででビルドするまでの環境ができたので、一度試しに動作確認しておくとよいかと。出力内容は、左側の「コンソール出力」からログが確認できるので、その内容を眺めつつ動作を確認すること。

これで、自動ビルドまでができるようになった。ただ、JUnitのテストのためには、下の「Antの呼び出し」のターゲットの項目を変更する必要がある。詳細はこのあとで。

JUnitの結果をxmlファイルに出力する

Androidアプリ開発では、JUnitによるテスト結果は標準でサポートされているが、結果をxmlファイルに出力する機能は用意されていない。

ただ、あるjarファイルをライブラリを参照して、テスト用プロジェクトを構築することでxmlファイルの出力が可能となる。AndroidのJUnitテスト結果を取得する - ほげほげ(仮)を参考にした。

で、このJUnitの対応をしたテストのプロジェクトは、あらかじめbitbucket.orgに置いておくこと。で、この結果、下の「Antの呼び出し」のターゲットは、「clean test-and-fetch」となる。

JUnit対応Antの呼び出し

つぎに、「ビルド後の処理の追加」から「JUnitテスト結果の集計」を追加する。ここで出力されるJUnitのテスト結果ファイルの数は組み合わせの分だけあるので、設定は以下のようになる。

JUnitテスト結果の集計

ビルドする

では、どうなるのか実際にビルドしてみる。ビルドは、左側のメニューから「ビルド実行」を選択する。ビルド完了画面が以下のこれが完了したら、このような画面となる。

JUnitテスト結果の集計

これで、自動ビルド&テストができるようになった。あとは好みに合わせて、EmmmaカバレッジやFindbugなどもチェックできるようにしていけばよいかと。