137
130

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Last updated at Posted at 2013-05-09

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設定編

137
130
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
137
130

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?