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) してミラーリングの設定や他のリポジトリのプロキシ設定などを行います。※どこかに良記事があると思いますのでググってみて下さい。


$ 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

  • ANDROID_HOME を設定した時と同様に、Jenkins のシステム設定画面で環境変数として ANDROID_NDK_HOME を設定します。

  • "保存" ボタンを押下して設定を完了します。

※ジョブ側の設定で使用する Maven のゴールとオプションで "android:ndk-build" を設定することで、 JNI ビルドを行うことが可能です。詳しくはプラグインドキュメントの Native Developmentandroid: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 でのビルドは問題ないですが、SonarAndroid NDK に対応していませんのでご注意下さい。iOS の場合は Xcode や Jenkins Xcode Integration Plugin を導入済であれば Sonarocto-technology/sonar-objective-c の Objecttive-C プラグインを入れればいけるはずです。

おわり