ライブラリプロジェクトを伴う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でビルドする場合にどうするかって所な件を検証してみただけで、実際にどうやるかはまぁケースバイケースだろうなって所かと