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

今更ながらですが、個人的に作成しているAndroidアプリの作成プロセスにJenkinsを導入してみました。

個人で行う小規模のアプリ作成であれば、とりあえずビルドしてエミュレータや実機でテストして、そして、ある程度の品質が確認できれば公開することは簡単ですが、それでも作成したアプリ数が増えるにつれ、バグ修正や機能追加などが大きな負担になってきます。テストケースが飛躍的に増えるからです。

また、Androidの場合はSDKバージョンが変わると、従来正常に動作していた機能が想定外の挙動をするケースも有るため、Androidアプリ作成においては、リグレッションテストをいかに効率的に行うか(≒自動化させるか)が肝となってきます。

そこで、Jenkinsです。JenkinsはCI(継続的インテグレーション)を実行するためのツールで、特にAndroidのような様々なハード/OSバージョン環境下でのテストが求められるプラットフォームでは非常に有用だと判断しました。

しかし、Jenkinsを使用するには種々の設定が必要となり、その設定は慣れていないと非常に手間取ってしまいます。そこで、Androidアプリ作成におけるJenkinsの設定内容を、記録としてここに残したいと思います。ただ、私もJenkinsについてはそれほど深く関知はしておりませんので、もしかしたら無駄な設定があるかもしれませんが、とりあえずテスト自動化が実現できた設定内容を掲載します。

参考にさせていただいた主な資料は以下の2点です。

基本的には、上記書籍で述べられている設定をベースにしました。ただし、書籍の方ではバージョン管理としてSubversionを採用していたので、Gitを使いたかった私としては上記サイトの記事をGit設定周りを中心に適宜参照させてもらいました。

なお、今回の実行環境(OS)は次の通りで、仮想環境に構築したCentOSの方にAndroid SDKやJenkinsをインストールしました。

VMware Player: 5.0.2
ホストOS: Windows 7 (64bit)
ゲストOS: CentOS 6.4 (64bit)

Jenkinsには多くのプラグインがあり、テストの目的に応じてそれらを使用することができますが、今回やりたかったことは、「リポジトリからソースを取得してビルドし、いくつかのハード環境(エミュレータ)のもとに、テストプロジェクトを走らせる」ということ。ですので、Jenkinsでモジュールを走らせる最低限の設定になります。

設定は大きく3つのステップに分かれます。

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

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

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

以降、この3つのステップ順に具体的に記述していきます。

なお、Jenkinsで実行させるプロジェクトのソースは、あらかじめリポジトリに登録しておく必要があります。今回のケースではBitbucketを利用しました。(Bitbucketにリポジトリを作成する方法は、ネットで検索すれば沢山出てくると思いますので、ここでは割愛させて頂きます。)
また、今回の設定で使ったソースコードは、テスト対象プロジェクトとして「SampleProject」、テストプロジェクトを「SampleProjectTest」として作成しました。Jenkinsの設定そのものとはあまり関係ありませんが、一応ソースをGitHubに置いておきます。

1. 実行環境の設定
まずはJenkins実行に必要な関連モジュール群をインストールします。

1.1 JDKのインストール

(1) JDKダウンロードページへアクセス
Java SE Development Kit 7 Downloads」のページへアクセスします。下記をクリックするとダウンロードページへ移行します。
Java SE Development Kit 7 - Downloads | Oracle Technology Network | Oracle

(2) rpmファイルのダウンロード
黄色の矢印で示した部分(jdk-7u25-linux-x64.rpm)をクリックし、rpmファイルをダウンロードします。

(3) rpmのインストール
ダウンロードしたrpmをインストールします。以降、rootユーザで実行します。

rpm -ivh jdk-7u25-linux-x64.rpm

(4) 環境変数の設定。
profileを編集します。

vi /etc/profile

下記内容を追加します。

export JAVA_HOME=/usr/java/default
export PATH=$PATH:$JAVA_HOME/bin
export CLASSPATH=.:$JAVA_HOME/jre/lib:$JAVA_HOME/lib:$JAVA_HOME/lib/tools.jar

編集したprofileを反映させます。

source /etc/profile

(5) JDKのバージョン確認
念の為、JDKバージョンがインストールしたものであるかを確認します。

java -version 

JDKバージョンがインストールしたものでなければ、下記コマンドで表示されるメニューでOralce JDKを使うように設定します。

update-alternatives --config java 

1.2 Jenkinsのインストール

Jenkinsをダウンロードしインストールを実行します。途中でなにか聞いてきたら、メッセージを確認して「y」で先に進めます。

wget -O /etc/yum.repos.d/jenkins.repo http://pkg.jenkins-ci.org/redhat/jenkins.repo
rpm --import http://pkg.jenkins-ci.org/redhat/jenkins-ci.org.key
install jenkins

Jenkinsサービスを起動します。

service jenkins start

ブラウザから以下のアドレスにアクセスし、Jenkinsが起動したことを確認します。

http://localhost:8080/


(備考: Jenkinsのインストールが完了すると、システムにjenkinsユーザが新たに追加されます。)

1.3 Antのインストール

Antをダウンロードします。

wget http://ftp.riken.jp/net/apache/ant/binaries/apache-ant-1.9.2-bin.tar.gz

tarボールを展開し、展開されたディレクトリを/user/libに移動します。

tar zxvf apache-ant-1.9.2-bin.tar.gz
mv apache-ant-1.9.2 /usr/lib

リンクを張ります。

ln -s /usr/lib/apache-ant-1.9.2/bin/ant /etc/alternatives/ant
ln -s /usr/lib/apache-ant-1.9.2/ /etc/alternatives/anthome
ln -s /etc/alternatives/ant /usr/bin/ant

profileを編集します。

vi /etc/profile

下記内容を追加します。

export ANT_HOME=/etc/alternatives/anthome

編集したprofileを反映させます。

source /etc/profile

1.4 Android SDKのインストール

Android SDKをダウンロードします。(ここではr22.0.5をダウンロードしていますが、最新のSDKを取得したい場合はDownload Android Studio and SDK toolsを確認して下さい。)

wget http://dl.google.com/android/android-sdk_r22.0.5-linux.tgz

tarボールを展開し、展開されたディレクトリをJenkinsのディレクトリに移動します。

tar xvf android-sdk_r22.0.5-linux.tgz
mv android-sdk-linux/ /var/lib/jenkins/

所有者をjenkinsユーザに変更します。

cd /var/lib/jenkins
chown -R jenkins:jenkins android-sdk-linux

(ちなみに自分の経験では、Jenkinsの実行にて何らかのエラーが発生する場合は、SDKなどjenkinsユーザがアクセスすべきディレクトリ/ファイルに、jenkinsユーザのアクセス権が設定されていなかったケースが多々ありました。)

SDKをアップデートします。途中でライセンスの確認等を聞かれたら、文面を確認して「y」で進めます。

cd android-sdk-linux/tools
./android update sdk --no-ui

以上で、「1. 実行環境の設定」の内容は終わりです。次回は次のステップ「2. Jenkins共通設定」を記載します。