Jenkins + Android + SonarQube (旧 Sonar) で一歩進んだ自動テストな CI 環境を構築する おまけ
おまけというか蛇足です。
Sonatype Nexus の導入
Maven リポジトリ管理ソフトの Sonatype Nexus の導入手順です。Maven で CI するなら connection refused を出さないためにも導入しておくのが現実的かと思います。類似プロダクトとして Artifactory などいくつかあります。各プロダクトの比較については、Maven Repository Manager Feature Matrix をご覧下さい。
- Tomcat を停止させます。
$ ${HOME}/apache-tomcat-7.0.42/bin/shutdown.sh
$ cd $home
$ mv nexus-2.6.1-02.war apache-tomcat-7.0.42/webapps/nexus.war
- Tomcat を開始します。
$ ${HOME}/apache-tomcat-7.0.42/bin/startup.sh
- 必要があれば http://localhost:8080/nexus へアクセスして Nexus へログイン (デフォルト管理者アカウント:admin / admin123) してミラーリングの設定や他のリポジトリのプロキシ設定などを行います。※どこかに良記事があると思いますのでググってみて下さい。
- Nexus 公式の導入手順通りに、Maven の処理全てが Nexus を経由するように設定を行います。また、Jenkins から Nexus のリポジトリへ deploy きるように Nexus の開発者アカウントの指定もしておきます。
$ cd $home
$ vi .m2/settings.xml
<?xml version="1.0" encoding="UTF-8"?> <settings xmlns="http://maven.apache.org/SETTINGS/1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd"> <servers> <server> <id>releases</id> <username>deployment</username> <password>deployment123</password> </server> <server> <id>snapshots</id> <username>deployment</username> <password>deployment123</password> </server> </servers> <mirrors> <mirror> <id>nexus</id> <mirrorOf>*</mirrorOf> <url>http://localhost:8080/nexus/content/groups/public</url> </mirror> </mirrors> <profiles> <profile> <id>nexus</id> <activation> <activeByDefault>true</activeByDefault> </activation> <repositories> <repository> <id>central</id> <url>http://central</url> <releases><enabled>true</enabled></releases> <snapshots><enabled>true</enabled></snapshots> </repository> </repositories> <pluginRepositories> <pluginRepository> <id>central</id> <url>http://central</url> <releases><enabled>true</enabled></releases> <snapshots><enabled>true</enabled></snapshots> </pluginRepository> </pluginRepositories> </profile> </profiles> </settings>
PSI-Probe の導入
個人的には、Tomcat 標準の manager Web アプリや host-manager Web アプリなどより使いやすいと思っている Tomcat 管理用ソフトの PSI Probe の導入手順です。
- PSI Probe の ダウンロードページ から執筆時点での最新である 2.3.3 (probe-2.3.3.zip) をダウンロードします。
- ZIP を解凍して probe.war を Tomcat の webapps へデプロイします。
- http://localhost:8080/probe へアクセスして使用できます。ログインアカウントは manager アプリと同じです。
Android NDK
入手先:http://developer.android.com/tools/sdk/ndk/index.html
JNI な Android アプリをビルドする場合に必要となる Android NDK の導入手順です。
- 32 bit 用と 64 bit 用のファイルをすべてダウンロードし、同じ場所に展開します。
$ cd $home
$
$ wget http://dl.google.com/android/ndk/android-ndk-r9-linux-x86.tar.bz2
$ bzip2 -dc android-ndk-r9-linux-x86.tar.bz2 | tar xvf -
$ rm -f android-ndk-r9-linux-x86.tar.bz2
$
$ wget http://dl.google.com/android/ndk/android-ndk-r9-linux-x86-legacy-toolchains.tar.bz2
$ bzip2 -dc android-ndk-r9-linux-x86-legacy-toolchains.tar.bz2 | tar xvf -
$ rm -f android-ndk-r9-linux-x86-legacy-toolchains.tar.bz2
$
$ wget http://dl.google.com/android/ndk/android-ndk-r9-linux-x86_64.tar.bz2
$ bzip2 -dc android-ndk-r9-linux-x86_64.tar.bz2 | tar xvf -
$ rm -f android-ndk-r9-linux-x86_64.tar.bz2
$
$ wget http://dl.google.com/android/ndk/android-ndk-r9-linux-x86_64-legacy-toolchains.tar.bz2
$ bzip2 -dc android-ndk-r9-linux-x86_64-legacy-toolchains.tar.bz2 | tar xvf -
$ rm -f android-ndk-r9-linux-x86_64-legacy-toolchains.tar.bz2
- "保存" ボタンを押下して設定を完了します。
※ジョブ側の設定で使用する Maven のゴールとオプションで "android:ndk-build" を設定することで、 JNI ビルドを行うことが可能です。詳しくはプラグインドキュメントの Native Development や android:ndk-build をご覧下さい。
その他
- Ant ではなく Maven マターな方が Jenkins での管理で幸せになれると思います。Gradle は知らんです。
- EMMA はバイナリに計測用のコードを埋め込むので、リリース APK の生成を同じジョブでしない方がよいと思います。また APK を生成するだけであればエミュレータの設定は不要なのでやはり別ジョブが良いのではないかと思います。
- EMMA ではなく uiautomator + スクショ保存については、stephanenicolas/Quality-Tools-for-Android の uiautomator profile を参考にすると幸せになれると思います。開発V字モデルで適用するフェーズが EMMA とは異なると思うので、これも別ジョブで良いと思います。
- モックを多様したテストはアンチパターンの一つですが、Android でのテストではその方がテストしやすい場合がまれにあります。特にライブラリプロジェクトでは、EMMA を使うべきか、Robolectric + cobertura を使うべきか慎重に検討した方が良いと思います。
- Android NDK を使用して Jenkins でのビルドは問題ないですが、Sonar は Android NDK に対応していませんのでご注意下さい。iOS の場合は Xcode や Jenkins Xcode Integration Plugin を導入済であれば Sonar へ octo-technology/sonar-objective-c の Objecttive-C プラグインを入れればいけるはずです。
おわり