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

ということで、[前回](http://qiita.com/items/4b7d5e0bfa667e65eb49)のつづき。Androidアプリの自動ビルド＆テストに必要なJenkinsの設定を行う。

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

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

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

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

## プラグインの設定

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

Andoid SDK
![Android SDK](https://dl.dropboxusercontent.com/u/60614469/qiita/qiita-jenkins-02.png)

JDK
![JDK](https://dl.dropboxusercontent.com/u/60614469/qiita/qiita-jenkins-03.png)

Git
![Git](https://dl.dropboxusercontent.com/u/60614469/qiita/qiita-jenkins-04.png)

Ant
![Ant](https://dl.dropboxusercontent.com/u/60614469/qiita/qiita-jenkins-05.png)

Git plugin
![Git plugin](https://dl.dropboxusercontent.com/u/60614469/qiita/qiita-jenkins-06.png)

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

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

![マルチ構成プロジェクトのビルド(アプリ側)](https://dl.dropboxusercontent.com/u/60614469/qiita/qiita-jenkins-07.png)

### プロジェクトの設定

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

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

![Multi SCMsの高度な設定(アプリ側)](https://dl.dropboxusercontent.com/u/60614469/qiita/qiita-jenkins-08.png)

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

![マルチ構成プロジェクトのビルド(テスト側)](https://dl.dropboxusercontent.com/u/60614469/qiita/qiita-jenkins-09.png)

![Multi SCMsの高度な設定(テスト側)](https://dl.dropboxusercontent.com/u/60614469/qiita/qiita-jenkins-10.png)

### ビルド・トリガの設定

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

![ビルド・トリガの設定](https://dl.dropboxusercontent.com/u/60614469/qiita/qiita-jenkins-17.png)

### マトリックスの設定

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

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

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

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

![マトリックスの設定](https://dl.dropboxusercontent.com/u/60614469/qiita/qiita-jenkins-11.png)

### ビルド環境

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

![ビルドの設定](https://dl.dropboxusercontent.com/u/60614469/qiita/qiita-jenkins-12.png)

### ビルド

ビルドの設定を行う。ここでは、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の呼び出し](https://dl.dropboxusercontent.com/u/60614469/qiita/qiita-jenkins-13.png)

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

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

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

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

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

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

![JUnit対応Antの呼び出し](https://dl.dropboxusercontent.com/u/60614469/qiita/qiita-jenkins-14.png)


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

![JUnitテスト結果の集計](https://dl.dropboxusercontent.com/u/60614469/qiita/qiita-jenkins-15.png)

## ビルドする

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

![JUnitテスト結果の集計](https://dl.dropboxusercontent.com/u/60614469/qiita/qiita-jenkins-16.png)

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