ということで、前回のつづき。Androidアプリの自動ビルド&テストに必要なJenkinsの設定を行う。
Jenkinsプラグインのインストール
以下のプラグインをインストールする。ここでインストールするのは次の3つ。トップのメニューから「Jenkinsの管理」 > 「プラグインの管理」 でインストールする。
- Jenkins Git Plugin
- Android Emulator Plugin
- Jenkins Multiple SCMs plugin
インストールが終わったら、jenkins再起動しておいてもよいかもね。
プラグインの設定
プラグインの設定を行う。設定は、トップメニューから「Jenkinsの管理」 > 「Jenkinsの設定」に入って行う。
プロジェクトを新規作成する
ここでようやくJenkinsのプロジェクトを新規に作成する。今回は、様々な環境(Androidのバージョンとか解像度など)でビルド&テストしたいので、「マルチ構成プロジェクトのビルド」を選択する。プロジェクト名は、適当につけておく。
プロジェクトの設定
プロジェクトの設定を行う。設定するリポジトリは、アプリのリポジトリ、テストコードのリポジトリの2つを設定する。最初に、Androidアプリのリポジトリの設定から。
Multiple SCMsを選択して、Add SCMからGitを選択する。つぎに、リポジトリ URLを「git@bitbucket.org:/<アカウント名>/<リポジトリ名>」で設定する。そして、2つある"高度な設定"ボタンのうち、下のボタンを押す。いくつか項目が増えるが、そこで「Local subdirectory for repo(optional)」と「Unique SCM name(optional)」に記入する。ここではどちらもリポジトリ名を設定した。他はデフォルトのままで。
次にテストコードのリポジトリを設定する。設定方法は、先のアプリの事例と同じ。「Local subdirectory for repo(optional)」と「Unique SCM name(optional)」は、アプリのリポジトリ側で設定した名称と異なる名称を付けること。
ビルド・トリガの設定
定期的にリポジトリの取得~ビルド、テストまでを行う設定ができる。ここでは、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の呼び出し」はテストのためのもの。
とりあえず、ここまででビルドするまでの環境ができたので、一度試しに動作確認しておくとよいかと。出力内容は、左側の「コンソール出力」からログが確認できるので、その内容を眺めつつ動作を確認すること。
これで、自動ビルドまでができるようになった。ただ、JUnitのテストのためには、下の「Antの呼び出し」のターゲットの項目を変更する必要がある。詳細はこのあとで。
JUnitの結果をxmlファイルに出力する
Androidアプリ開発では、JUnitによるテスト結果は標準でサポートされているが、結果をxmlファイルに出力する機能は用意されていない。
ただ、あるjarファイルをライブラリを参照して、テスト用プロジェクトを構築することでxmlファイルの出力が可能となる。AndroidのJUnitテスト結果を取得する - ほげほげ(仮)を参考にした。
で、このJUnitの対応をしたテストのプロジェクトは、あらかじめbitbucket.orgに置いておくこと。で、この結果、下の「Antの呼び出し」のターゲットは、「clean test-and-fetch」となる。
つぎに、「ビルド後の処理の追加」から「JUnitテスト結果の集計」を追加する。ここで出力されるJUnitのテスト結果ファイルの数は組み合わせの分だけあるので、設定は以下のようになる。
ビルドする
では、どうなるのか実際にビルドしてみる。ビルドは、左側のメニューから「ビルド実行」を選択する。ビルド完了画面が以下のこれが完了したら、このような画面となる。
これで、自動ビルド&テストができるようになった。あとは好みに合わせて、EmmmaカバレッジやFindbugなどもチェックできるようにしていけばよいかと。