AndroidアプリテストのためのJenkins設定 3

前回の続きです。今回は最後のステップ「3. プロジェクト毎の設定」の内容を記述します。

1. 実行環境の設定
Jenkinsを実行させるためのマシン環境の設定です。

2. Jenkins共通設定
Jenkinsの実行全般に関わる設定です。

3. プロジェクト毎の設定 (←今回)
Jenkinsに登録した各プロジェクトの固有の設定です。

3. プロジェクト毎の設定

Jenkinsのトップにアクセスします。左側メニューの「新規ジョブ作成」をクリックします。「ジョブ名」には任意のジョブ名を入力し、「マルチ構成プロジェクトのビルド」を選択します。「OK」をクリックすると、ジョブの設定画面に遷移します。

ソースコード管理
このエリアでは、テストプロジェクトとテスト対象プロジェクトの各々について設定します。
まずはテスト対象プロジェクトから。
「Multiple SCMs」を選択し、「Add SCM」をクリックして「Git」を選択します。

「Repositories」にリポジトリURLを入力します。(リポジトリURLはBitbucketにアクセスすると記載されています。)

Repository URL: git@bitbucket.org:Kyakujin/repo_sampleproject.git

「Branches to build」に以下を入力します。

Branch Specifier (blank for default): **

下の方にある「高度な設定」ボタンをクリックし、以下を設定します。

「Local subdirectory for repo(optional)」:repo_sampleproject
「Unique SCM name(optional)」: repo_sampleproject


次はテストプロジェクトについて設定します。
「Multiple SCMs」を選択し、「Add SCM」をクリックして「Git」を選択します。

「Repositories」にリポジトリURLを入力します。(リポジトリURLはBitbucketにアクセスすると記載されています。)

Repository URL: git@bitbucket.org:Kyakujin/repo_sampleproject_testproj.git

「Branches to build」に以下を入力します。

Branch Specifier (blank for default): **

下の方にある「高度な設定」ボタンをクリックし、以下を設定します。

「Local subdirectory for repo(optional)」:repo_sampleproject_testproj
「Unique SCM name(optional)」: repo_sampleproject_testproj

ビルド・トリガの設定
定期的に実行させる場合はここで設定を行います。「SCMをポーリング」にチェックし、例えば以下のように設定します。

スケジュール: 0-59/30 * * * *

マトリックスの設定
Androidのバージョンや画面解像度等の組み合わせテストをここで設定することができます。今回の例では、OSバージョン2.3.3と4.2の元で、解像度としてWVGAとHVGAの組み合わせテストを実行します。

「軸の追加」ボタンをクリックします。「ユーザ定義」を選択して以下を入力。
(以下、「軸の追加」ボタンクリック毎に設定します。)

名前:OS
値:2.3.3 4.2

名前:display
値:WVGA HVGA

名前:density
値:mdpi

名前:abi
値:armeabi armeabi-v7a

なお、abiについてはOSバージョンに応じたarmeabiを指定する必要があります。各OSに対応したarmeabiは以下のコマンドで調べることができます。

cd /var/lib/jenkins/android-sdk-linux/tools
./android list targets

「組み合わせフィルター」をチェックし、フィルターに以下を入力します。その下の「各設定を順次起動」にチェックを入れます。ここでは、OSが「2.3.3」でありabiが「armeabi」の構成、またはOSが「4.2」でabiが「armeabi-v7a」の構成での実行を指定しています。

(OS=="2.3.3" && abi=="armeabi") || (OS=="4.2" && abi=="armeabi-v7a")

ビルド環境
「Run an Android emulator during build」にチェックを入れ、以下を設定します。

Android OS version:${OS}
Screen density:${density}
Screen resolution:${display}
Device locale:ja_JP
SD card size:16M
Target ABI:${abi}

「Common emulator options」配下の項目をすべてチェックを外します。特に、「Show emulator window」にチェックが入っているとエミュレータの起動に失敗するようで、ここはハマりポイントの1つのようです。

ビルド
「ビルド手順の追加」をクリックし、シェルの実行を選択します。そして「シェルスクリプト」の欄に以下を入力します。

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

echo UPDATE PROJECT
android update project -p ./repo_sampleproject
echo UPDATE TEST PROJECT
android update test-project -m ../repo_sampleproject -p ./repo_sampleproject_testproj

「ビルド手順の追加」をクリックします。「Antの呼び出し」を選択し、以下を設定します。

使用するAnt: Ant
ターゲット: clean debug install

「高度な設定」をクリックし、以下を設定します。

ビルドファイル:./repo_autoeco/build.xml
プロパティ:sdk.dir=/var/lib/jenkins/android-sdk-linux

もう一つ「ビルド手順の追加」をクリックします。「Antの呼び出し」を選択し、以下を設定します。

使用するAnt: Ant
ターゲット: clean debug install test

「高度な設定」をクリックし、以下を設定します。

ビルドファイル:./repo_autoeco_testproj/build.xml
プロパティ:sdk.dir=/var/lib/jenkins/android-sdk-linux

「ビルド後の処理の追加」をクリックします。「成果物を保存」を選択し、「保存するファイル」に以下を入力します。

**/bin/*.apk

「ビルド後の処理の追加」をクリックします。「E-mail通知」を選択し、メールアドレスを入力。ビルド失敗時などにメールが送信されます。「不安定ビルドも逐一メールを送信」にもチェックを入れます。


以上まで設定出来れば、JenkinsによるAndroidのテストが実行出来ます。Jenkinsのトップ画面からジョブ(AndroidSampleProject)を選択し、画面遷移後の左側メニューにある「ビルド実行」をクリックします。

ビルドが成功すれば、以下の様な青い丸印が組み合わせマトリクスに表示されます。(失敗すれば赤丸になります)。

また、コンソール出力を見れば、以下のようにテストが成功したことが確認できます。

【注意】
64bitのLinux環境でAndroidエミュレータを実行させる場合、64bitに対応させるためのライブラリを別途インストールする必要があります。もしそれをしないままエミュレータを起動しようとすると、以下のようなメッセージが出ます。(メッセージ内容は環境によって異なるかもしれません。)
「/lib/ld-linux.so.2: bad ELF interpreter: No such file or directory」

実際に次のようなコマンドでエミュレータを作り、それが起動できるか試してみると具体的なエラーが分かります。

./android create avd -n avd4.1.2 -t 23 --abi armeabi-v7a
./emulator -avd avd4.1.2 -scale 0.5

だいたいにおいて、エラーメッセージとして「◯◯ライブラリが無い」という意味のメッセージが出るので、その都度◯◯に該当するライブラリをインストールしていくのが手っ取り早いと思います。私の環境の場合は、以下のようなライブラリをインストールすることにで問題解決しました。

yum install ld-linux.so.2
yum install libstdc++.so.6
yum install libz.so.1

上記エラーを含め、Jenkins実行時に何らかのエラーが出る場合は、およそ以下のことが原因のようです。

  • 64bit対応のためのライブラリが未インストール
  • Android SDKのアップデートが不完全
  • jenkinsユーザが然るべきフォルダにアクセスできない(アクセス権がない)

一番目の原因の対応については先ほど述べました。
二番目のSDKアップデート不完全については、再度「./android update sdk --no-ui」を実行します。
最後の問題については、「chown -R jenkins:jenkins [ディレクトリ] 」でjenkinsユーザにアクセス権を与えます。


以上で、AndroidアプリテストのためのJenkins設定は完了です。この他、FindBugsやその他諸々の解析ツールを組み込むこともできますので、テストの目的に応じて各々のツールを追加インストールしてもらえればと思います。

お疲れ様でした。