ライブラリプロジェクトを伴うAndroidアプリをJenkinsでビルド

2013-06-13T00:00:00+00:00 Android Jenkins

んまぁライブラリプロジェクト自体をJenkinsのビルドプロジェクト(フリースタイル)とかで定義しちゃっても良いとは思いますけど、ActionBarSherlockとかだったりだとか公開されている有用なAndroidライブラリとかを伴うプロジェクトをビルドするとなると定義するかプロジェクト内にぶち込んじゃうかっていう所だと思うのですが、その後者側の「参照するライブラリプロジェクト自体をビルドプロジェクトとして定義せずにアプリプロジェクトにぶち込んでビルド」するっていう方式的なのを検証してみた

Jenkins側の事前設定

Jenkins Git Pluginを使う。入れたのは https://wiki.jenkins-ci.org/display/JENKINS/Git%2BPlugin

アプリプロジェクトの構造

ディレクトリ内にアプリプロジェクトディレクトリと参照するライブラリプロジェクトのディレクトリは分けてる。

root:
  - ActionBarSherlock
  - SlidingMenu
  - アプリプロジェクト

っていう感じなのだけど。ActionBarSherlockとSlidingMenu自体はgithubで提供されているので、git submoduleを使って取得する。でこの構造をgitサーバー辺りにpushしておく

git submoduleなやつはJenkinsでワークスペースをビルドする際にフェッチされる模様なのでこっちで何かするとかは無い模様。但し、android update [lib-]projectとかは必要

まぁ構造的なのはそんくらい

ビルドの設定

ソースコード管理からgitを選択して、pushしたgitサーバーのリポジトリを指定する。上記にも書いたけど、これでワークスペースにgitからチェックアウトされて格納される模様

で上記の注釈でも書いたけど、gitから取ってきてもupdate project関係は必要な模様。なのでビルド手順の追加でantでビルドする前にシェルスクリプトの実行で

android update lib-project -p ActionBarSherlock/actionbarsherlock -t [Android Build Target]
android update lib-project -p SlidingMenu/library -t [Android Build Target]
android update project -p sample -l ../ActionBarSherlock/actionbarsherlock
android update project -p sample -l ../SlidingMenu/library

等ような初期設定が必要。あともうひとつ難点があって、Androidの場合android-support-v4だとかが組み込まれているケースがある。ファイルのハッシュサムがマッチしないとAndroidのビルドがずっこけるっていうのがあるので、アプリプロジェクトにベースとなるandroid-support-v4を入れておいて

cp sample/libs/android-support-v4.jar ActionBarSherlock/actionbarsherlock/libs/
cp sample/libs/android-support-v4.jar SlidingMenu/library/libs/

っていうように同一の物を使うようにする等でビルドするようにする。まぁ上記の2つのビルドスクリプトを合わせれば良い

でその後にantビルド方式を「clean release」辺りを行うように設定。あとは普通にJenkinsでビルド

ビルドログ

クソ長いので省略

コンソール出力
ビルドします。 ワークスペース: /home/kinjouj/.jenkins/jobs/sample/workspace

※gitのチェックアウト
Checkout:workspace / /home/kinjouj/.jenkins/jobs/sample/workspace

※ビルド手順1のシェルスクリプトの実行
[workspace] $ /bin/sh -xe /opt/tomcat/temp/hudson7788210294554566064.sh

+ android update lib-project -p ActionBarSherlock/actionbarsherlock -t 3

+ android update lib-project -p SlidingMenu/library -t 3

+ android update project -p sample -l ../ActionBarSherlock/actionbarsherlock

+ android update project -p sample -l ../SlidingMenu/library

+ cp sample/libs/android-support-v4.jar ActionBarSherlock/actionbarsherlock/libs/

+ cp sample/libs/android-support-v4.jar SlidingMenu/library/libs

※ビルド手順2のantビルドの実行
[sample] $ ant -file build.xml clean release
Buildfile: /home/kinjouj/.jenkins/jobs/sample/workspace/sample/build.xml

release:

BUILD SUCCESSFUL
Total time: 1 minute 8 seconds
Finished: SUCCESS

という感じか。んまぁ公開されているライブラリとかを使う場合において、Jenkinsでビルドする場合にどうするかって所な件を検証してみただけで、実際にどうやるかはまぁケースバイケースだろうなって所かと

robotium(+ActionBarSherlock)を使ってみた Laravel使ってみた (4) - Routing Filter -