sandbox

Scala, Android, Architecture, Management, Service Design あたりを主戦場としております

Jenkins と始める Android プロジェクトでの CI - Ant 基本編

f:id:tlync:20120326011643p:image

Goal

Jenkins で達成出来る事は沢山ありますが、この記事では複雑な設定を伴わないで実現可能な、apk の自動生成、テストの自動実行までを対象とします。


またビルドツールも Ant, Maven, Gradle, Ivy 等がありますが、標準でもサポートされており、最小構成な Ant を選択しています。
※ Jenkins でどこまで自動化したいかによりますが、様々なタスクを実行しようと思うと豊富な Plugin を持つ Maven が便利ではあるので、それはまた別途。

ant でビルド出来る様にする

Jenkins で CI するには、まずはプロジェクトをコマンドでビルド出来る必要があります。
Eclipse で作成したプロジェクトでは、そのままではビルドする事が出来ない為、後から Android SDK に含まれるコマンドを利用して Ant 用の build.xml を生成します。

android update project -p {プロジェクトのパス} -n {プロジェクト名}


もし、テストプロジェクトやライブラリプロジェクトを利用しているのであれば、各プロジェクトでも下記のコマンドを実行します。


テストプロジェクト

android update test-project -p {プロジェクトのパス} -m {テスト対象のプロジェクトのパス}


ライブラリプロジェクト
Android プロジェクトの方で -l オプションを利用し 、ライブラリプロジェクトを指定する必要がある

android update lib-project -p {プロジェクトのパス}


ここまで行うと ant debug, ant release などといったコマンドで debug 用の apk、release 用の署名されていない apk を生成出来る様になります。
署名済みの apk を自動生成するには keystore のディレクトリパスを登録する必要がある為、ant.properties というファイルを、 メインプロジェクトのルートに作成します。

key.store=../path/to/release.keystore
key.alias=test
# パスワードも登録すると完全に自動化できる
#key.store.password=password
#key.alias.password=password

パスワードを登録するのがセキュリティ的に問題があれば、Jenkins の設定で指定する事も出来ます。

コマンドを試す

メインプロジェクトでは、ant release とすると署名済みの apk が、プロジェクトの bin 以下に生成されます。

ant clean release


テストプロジェクトでは、テストプロジェクト以下で下記のコマンドでテストを実行できます。

ant clean emma debug install test


デバイスを指定する場合はこんな感じ

ant -Dadb.device.arg="-s emulator-5554" clean emma debug install test

emma はカバレッジの生成なのでなくてもいいです。

Android Emulator Plugin のインストール

Jenkins には、Jenkins サーバー上でエミュレータを自動で起動する事が出来るすばらしいプラグインが提供されています。
Manage Jenkins > Manage Plugin > Available にある、Android Emulator Plugin にチェックしてインストールします。

Jenkins の Job を作成する

1. New Job を選択し、Build a free style project を選択します。

f:id:tlync:20120326002418p:image

2. Source Code Management では、SCM に応じた設定をするだけで、特別な設定は必要ありません。メインプロジェクト等が含まれるルートディレクトリを指定します。


3. Build Environment で、テストを実行する対象の emulator を指定します。存在する emulator を指定してもいいですし、パラメータを指定し、新規に作成する事も出来ます。また、このプラグインは Android SDK が入っていなければ自動でダウンロードしてインストールしてくれるという優れもの。


4. Buildでは、メインプロジェクト用、テストプロジェクト用の ant ターゲットをそれぞれ指定します。


f:id:tlync:20120326005224p:image


もし、まだ Jenkins の設定で ANT_HOME を指定していない場合は、その設定をする必要があるかもしれません。


5. Post Build Action で、apk を Jenkins の成果物として扱う為、apk のパスを指定します。


f:id:tlync:20120326005742p:image


以上の設定で、Android プロジェクトのテストの実行、apk 生成までが自動化できているはずです。


f:id:tlync:20120326005849p:image


上記 apk の QR コードをどこかの wiki に貼っておくなどすれば、常に最新の apk をインストールする事ができます。
あとはこの Job を svn, git のコミットフックにしかければ完全に自動化する事ができます。

まとめ

紹介してきた一連の流れは最小限の設定に過ぎない為、テストの実行しているのにレポートがダッシュボードに出力されていないなど、残念なところが多々あります。
maven android plugin を使うとおのずと解決される問題もありますし、ant で頑張って解決する方法もあるので、それらについてはおいおい書いていきたいと思います。