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
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共通設定」を記載します。