Edited at

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

More than 5 years have passed since last update.

Jenkinsを使ってAndroidアプリのテスト環境を構築する。今更感がある内容だけど、ひとまとめになった情報がなかったので、メモも兼ねてココにまとめておく。構築した感想としては、Jenkinsにまともに触るのがはじめてな上に、Androidアプリ開発の事情も加わって、知識ゼロから構築するのは意外と大変だったということ。


前提条件

前提条件は次のとおり。


  • Jenkinsサーバはローカルネットワークに用意

  • ソースコードは git & bitbucket.orgのプライベートリポジトリで管理

  • EclipseでのAndroidアプリのプロジェクトは、アプリ本体とテストコードの2つを用意

  • Jenkinsでのビルド&テストは、Androidのバージョンや解像度別に行う


構築環境環境

主なソフトウェアの種類とバージョンは次の通り。


  • Ubuntu 12.04(64bit) Desktop

  • Jenkins 1.514

  • Android SDK r21

  • Oracle JDK6


Androidアプリのプロジェクトの下準備

アプリ開発は、通常ローカルPCで行っているはず。で、Jenkinsのサーバーを立ち上げる前に、まずローカルで設定しておかなきゃいけないことがあるので、まずはそれから。

今回は、以下のようなフォルダ構成で行う。Eclipseでプロジェクト&テストを生成した際の構成そのまま。つまり、同一ディレクトリに、アプリケーションのプロジェクトと、アプリテストのプロジェクトがある。


  • foo/jenkins_smpapp1

  • foo/jenkins_smpapp1test

Jenkinsは、antを使ってビルドする。そのため、antのビルドで必要なbuild.xmlファイルが必要となるのだけど、そのファイルはandroid sdkのツールで生成可能。では、さっそく作ってみる。

$ android update project -p ./jenkins_smpapp1

$ android update test-project -m ../jenkins_smpapp1/ -p jenkins_smpapp1test

らくちんですな。これでbuild.xmlファイルができたので、早速ターミナルからビルドする。

$ cd jenkins_smpapp1

$ ant clean debug install

つづいてテストを実行してみる。実行する前には、実機の接続 or エミュレータ起動をお忘れ無く。

$ cd ../jenkins_smpapp1test

$ ant clean debug install test

これでテストが動作したらOK。動作が確認できればbitbucket.orgのプライベートリポジトリにgitを使って登録しておく。なお、このサンプルは、jenkins_smpapp1jenkins_smpapp1testで公開しているので、気軽に試したい方は、そちらをforkしてもらうとよいかと。


jenkinsサーバーを構築する

ここからJenkinsサーバーを構築していく。Ubuntu 12.04 Desktopのインストール直後の状態からはじめる。


Oracle JDK6をインストールする

(OpenJDKではなく)Oracle JDK6をインストールする。インストールする方法はいくつかあるけど、一例としてOracleが配布してるJDK6をUbuntuにインストールする方法を紹介しておく。


Jenkinsをインストール

JenkinsはUbuntuの標準パッケージではなく、Jenkinsの運営団体(と呼べばいいのか?)から提供されているUbuntuのパッケージをインストールしてみた。Ubuntuで管理されているものよりは新しいものが来るはずなので。以下の手順はInstalling Jenkins on Ubuntu - Jenkins - Jenkins Wikiより。

$ wget -q -O - http://pkg.jenkins-ci.org/debian/jenkins-ci.org.key | sudo apt-key add -

$ sudo sh -c 'echo deb http://pkg.jenkins-ci.org/debian binary/ > /etc/apt/sources.list.d/jenkins.list'
$ sudo apt-get update
$ sudo apt-get install jenkins

jenkinsにアクセスは、http://localhost:8080/ でアクセス可能。

インストール後、ユーザー"jenkins"が追加される(ホームディレクトリは/var/lib/jenkins)。この後、SSHの設定やAndroid SDKのインストールするんだけど、そういったjenkinsが関係するソフトウェアや設定は、ユーザー"jenkins"に対して行うということは忘れないように。


Javaの切り替え

Jenkinsをインストールすると、Jenkinsの他にOpenJDK 7やOpenJREがインストールされ、デフォルトで使用する設定となる。これだとAndroidアプリ開発ではトラブルの元となりがちなので、Oracle JDKがデフォルトとなるよう設定しておく。切り替えには、update-alternativesコマンドを利用する。

$ sudo update-alternatives --config java

選択肢 パス 優先度 状態
------------------------------------------------------------
* 0 /usr/lib/jvm/java-6-openjdk-amd64/jre/bin/java 1061 自動モード
1 /usr/lib/jvm/java-6-openjdk-amd64/jre/bin/java 1061 手動モード
2 /usr/lib/jvm/java-6-oracle/bin/java 1 手動モード
現在の選択 [*] を保持するには Enter、さもなければ選択肢の番号のキーを押してください: <- ここで2をOracle JDKを選択する


Android SDKのインストール

Android SDKをインストールする。ユーザー"jenkins"がアクセスできるディレクトリなら、どこにインストールしてもよい。ここでは、Jenkinsのホーム以下にインストールした(つまり/var/lib/jenkins/android-sdkにAndroid SDKをインストールした)

インストール方法の詳細については省略ということで。


必要なパッケージをインストールする

Ubuntuのパッケージからgitとantをインストールする。本来は環境変数ANT_HOMEの設定が必要だが、Jenkinsの設定でも指定できるので、ここでは設定しない。

$ sudo apt-get install git-core ant


sshの設定

つぎにsshの設定を行う。これは、jenkinsがbitbucket.orgのプライベートリポジトリにアセクスため。ま、bitbucket.orgに限らず、リモートでgitのリポジトリを制御するには必須の設定となる。

ここでは、SSHの基本的な話は省略するので、詳しく知りたい人はSSHでググってくださいませ。これらSSHの設定や鍵は、ユーザー"jenkins"でログインした際に有効になっている必要がある。まず、ユーザー"jenkins"で利用する鍵を生成する。

$ sudo -u jenkins ssh-keygen

Generating public/private rsa key pair.
Enter file in which to save the key (/var/lib/jenkins/.ssh/id_rsa):
Created directory '/var/lib/jenkins/.ssh'.
Enter passphrase (empty for no passphrase): <-パスフレーズを聞かれるが、Enterを押してスキップする
Enter same passphrase again:
Your identification has been saved in /var/lib/jenkins/.ssh/id_rsa.
Your public key has been saved in /var/lib/jenkins/.ssh/id_rsa.pub.

ちなみに、"sudo -u jenkins"ってのは、jenkinsの権限でコマンドを実行するための方法。こうすることで、jenkinsアカウントにログインせずに処理できるので、何かと便利。

鍵が生成された直後は、次のファイル構成になっているはず。

$ sudo -u jenkins ls -la /var/lib/jenkins/.ssh

total 16
drwx------ 2 jenkins nogroup 4096 May 9 11:20 .
drwxr-xr-x 9 jenkins adm 4096 May 9 11:20 ..
-rw------- 1 jenkins nogroup 1679 May 9 11:20 id_rsa
-rw-r--r-- 1 jenkins nogroup 396 May 9 11:20 id_rsa.pub

この鍵を使って、bitbucket.orgのリポジトリにアクセスするためには、この公開鍵(id_rsa.pub)は、bitbucket.orgに登録しなきゃいけない。ということで、登録しておく。

bitbucket.orgに公開鍵を設定

公開鍵を設定したあとは、一度bitbucket.orgにアセクスして、サイトを認証(.ssh/known_hostファイルを生成)する必要がある。この時点ではファイルの取得までする必要はない(といいつつ、git cloneしちゃってるけど)

$ sudo -u jenkins git clone git@bitbucket.org:demuyan/jenkins_smpapp1.git /var/lib/jenkins/tmp

Cloning into '/var/lib/jenkins/tmp'...
The authenticity of host 'bitbucket.org (207.223.240.181)' can't be established.
RSA key fingerprint is 97:8c:1b:f2:6f:14:6b:5c:3b:ec:aa:46:46:74:7c:40.
Are you sure you want to continue connecting (yes/no)? yes <- ここで yes と入れる
Warning: Permanently added 'bitbucket.org,207.223.240.181' (RSA) to the list of known hosts.

続きは、Jenkins設定編