SenTestingKitとJenkinsを使用したiOSプロジェクトへのCIの導入(2)

前回の記事では、プロダクトコードとそれに対応するテストコードを書き、プロダクトコードのカバレッジを取得するまでを解説しました。

今回は、本題であるJenkinsの導入からJenkinsでカバレッジを取得するまでを説明します。

今回の内容は以下の通りです。
1. xcodebuild(Xcode Command Line Tools)のインストール
2. Jenkinsのインストール
3. Jenkinsのプラグインの追加
4. gcovrのインストール
5. Jenkinsのjobsの追加

実際に作業を始める前に処理の内容について。


Jenkinsを利用した継続的インテグレーションでは、

ソースコードをpush
→Jenkinsでpushをフックし、ビルド・テスト
→ビルドに成功、またはテストが基準以上であればメインブランチへのマージ

 

といった処理フローになっていると思いますが、
今回説明するiOSプロジェクトでは、以下のような処理フローになっています。

 

ビルド開始
→xcodebuildを利用し、ソースコードをビルド
→ビルド後にテスト
→テスト結果をgcovrを使用し、xmlに変換
→Jenkinsのプラグインを利用し、gcovrが生成したxmlを元にカバレッジを取得

 

では、実際に環境構築を行いましょう。

1. xcodebuild(Xcode Command Line Tools)のインストール

Xcode command line toolをインストールします。
といっても、Xcode->Preferences->Downloadsと遷移し、Command Line Toolsを
インストールするだけです。

f:id:nerd0geek1:20130916185648p:plain

f:id:nerd0geek1:20130916185655p:plain


2. Jenkinsのインストール

brew install jenkins

とhomebrewを使ってインストールするのが一番楽かと思います。
qiitaの投稿もありますので、そちらを参照して頂ければと思います。
http://localhost:8080/にアクセスしてJenkinsの画面が表示されれば問題ないです。


3. Jenkinsのプラグインの追加

Jenkinsのインストールが済んだら、今回使用するプラグインをインストールします。
プラグインのインストールは"Jenkinsの管理"->"プラグインの管理"から行います。

f:id:nerd0geek1:20130916192531p:plain

今回は以下の3つのプラグインをインストールします。

・Jenkins GIT plugin
・Jenkins Cobertura Plugin
Xcode integration

f:id:nerd0geek1:20130916192802p:plain

3つのプラグインを全てインストールしたら、Jenkinsの再起動を行います。
再起動を忘れてしまった場合、http://localhost:8080/safeRestartにアクセスすれば
再起動を行うことができます。

 

4. gcovrのインストール

sudo easy_install gcovr

でインストールします。このコマンドでのインストールに失敗する場合、
こちらのブログに記載されているように、gcovrをダウンロードして、chmodで実行権限を付与し、/usr/local/bin直下に配置するのが良いかと思います。

 

5. Jenkinsのjobsの追加

準備が整いましたのでJenkinsのjobsを追加します。
ダッシュボードの"新規ジョブ作成"を選択し、ジョブ名を入力、その後、
"フリースタイル・プロジェクトのビルド"を選択します。
ジョブ名は今回、"Sample Project Coverage Test"とします。

f:id:nerd0geek1:20130916223726p:plain

 

OKボタンをクリックした後の画面では、各種設定を行います。
今回のサンプルプロジェクトはgithubにアップしてありますので、
"ソースコード管理"ではその情報を入力します。

f:id:nerd0geek1:20130916224404p:plain

 入力後、ビルド->ビルド手順の追加->Xcodeを選択し、以下のように入力します。

f:id:nerd0geek1:20130916225452p:plain

今回、入力が必要なのは、SDK、Custom xcodebuild arguments、Xcode Project Directoryです。それぞれについては以下の通りです。
SDK:使用するSDK。今回はiphonesimulator6.0を使用(実機ではgcdaが生成されない
 ため)。入力可能な値はターミナルで

xcodebuild -showsdks

と入力することで確認できます。
・Custom xcodebuild arguments:TEST_AFTER_BUILD=YES この値を入力しておくと
 ビルド後にテストが実行され、その結果、gcdaファイルが生成されます。
Xcode Project Directory:今回のプロジェクトでは、
 gitのディレクトリ≠プロジェクトのディレクトリであるため、プロジェクトの
 ディレクトリを指定しています。

(※注意点:githubを使用した場合、the iPhoneSimulator platform does not currently support application-hosted testsとのエラーメッセージが表示され、テストが実行されません。これを見ると解決できそうですが。bitbucketについては問題なく動作するのを確認しています。bitbucketはこちらのブログにもあるように個人でprivate repository使う場合にはかなりお得なので、bitbucketを使用してみてはいかがでしょうか。)


Xcodeに関する設定を入力したら、シェルスクリプトでgcovrについて、ビルド後の処理でcoberturaカバレッジレポートの集計について入力します。

f:id:nerd0geek1:20130916230445p:plain

以上の設定により、gcovrがプロダクトコードのカバレッジのみ(オプション"-e .*Tests/によりテストコードのカバレッジは集計されないため")を集計し、その結果をcobertura-report.xmlとして出力、その後、Coberturaが生成されたcobertura-report.xmlを取り込み、コードカバレッジを集計・表示してくれます。

以上でプロジェクトの作成からJenkinsを利用したカバレッジの取得までができました。
環境構築だけなら、意外と簡単ではないでしょうか。
これを機にCIを始めてみませんか?