Passion+Action+Sincerely=Success!

週末にのみ趣味でコーディングするおやじの備忘録

Jenkinsにジョブを組み込み、iOSアプリのビルドとテストを自動実行するぜ

 Jenkinsを起動できる環境は整備されていることを前提とする。もしまだ整備されていないなら、以前の投稿をみてくれ!

 もうひとつ、以下ではiOSのテストのフレームワークにKiwiを導入している。iOSアプリのプロジェクトにKiwiを組み込む方法は、この投稿を見てくれ!

 

(1) Jenkinsにプラグインをインストールする。

 まずは、Jenkinsのダッシュボードから、iOSアプリのビルドとテストを実行するために必要となる各種プラグインをインストールする。

 Jenkinsのプラグインをインストールするには、ダッシュボード画面の左側に表示されているメニューから[Manage Jenkins]を選択し、[Manage Plugins]を開く。  

[Available]タブを開き、プラグインを選択し[Install without restart]をクリックしてインストールします。上部の検索バーにインストールしたいプラグインの名称を入力すると、目的のプラグインをすぐに探し出せる。

f:id:diinosimple:20141103172419p:plain

設定するのは、以下の4つのプラグイン

[1] Git Plugin

  Gitリポジトリからソースコードをクローンするためのプラグイン

[2] Xcode Plugin

  Xcodeプロジェクトのビルドやテストを実行するために必要なプラグインXcodeに付属している「xcodebuild」というXcodeプロジェクトをビルドするためのコマンドラインツールの各コマンドを実行する。

[3] CocoaPods Plugin

  CocoaPodsのコマンドを実行するプラグイン。「pod install」などのコマンドを実行できます。

[4] Cobertura Plugin

 テストのコードカバレッジを解析するためのプラグインです。コードカバレッジをJenkinsのダッシュボードにグラフィカルに表示する。

 

(2) Xcodeプロジェクトの設定変更

 XcodeプロジェクトをJenkinsでビルド/テストするには、Xcodeワークスペースを開き、メニューから[Product]->[Scheme]->[Manage Schemes]を選択する。

 この中の、対象のTarget Projectと同じ名前のSchemeの[Shared]にチェックを入れてくれ!。これにより、Schemeリポジトリに共有できるようになるらしい。

f:id:diinosimple:20141103173218p:plain

 んでもって、プロジェクト設定の[Build settings]にも変更を入れるぜ。

[Generate Test Coverage Files]と、[Instrument Program Flow]を[Yes]に変更しよう。これで、テストのカバレッジファイルが書き出されるそうだ。

f:id:diinosimple:20141103173541p:plain

f:id:diinosimple:20141103173553p:plain

 

いよいよ、Jenkinsのジョブを作成するぞ!

(3) Jenkinsジョブの作成

 Jenkinsジョブを作成するには、ダッシュボード画面の左上の[New Item]を押し、Item nameに、例えばMyLocations-developと入力し、[Freestyle project]を選択、OKボタンをクリックする。

f:id:diinosimple:20141103174126p:plain

 次にジョブ設定画面が表示される。ジョブの対象となるGitレポジトリや、ジョブがどのようなビルドを実行するか、ビルド実行後にどのような処理を行うかなどをジョブの詳細を設定していく。

(4) Source Code Management

  • Gitにチェックボックスを入れて、対象となるiOSアプリのGit RepositoryURLを指定する。
  • Credentialsは-none-で良い。
  • Branches to buildは、デフォルトでは、masterになっているので適宜変更する。
  • そのほかの設定は、特に変更する必要はない。

(5) Build Triggers

 ジョブをどのタイミングで実行するかは[Build Triggers]セクションで設定できる。とりあえず、SCMをpollingという設定を試してみた。これは、リポジトリをpollingで更新がないか定期的にチェックする設定だ。

 15分ごとにpollingを実行するには、以下のような設定をすべし。

f:id:diinosimple:20141103174910p:plain

 

(6) Build

次にビルドの設定だが、ここでは、ジョブを行う時の処理の流れと処理の設定を行う。今回は、以下の順番で処理を実行させる。

[1] CocoaPodsの実行(pod install)

[2] Xcodeプロジェクトのビルド(ipaファイルの生成)

[3] xcodebuildコマンドによるテスト実行

[4] Gcovrによるテストのカバレッジファイルの出力

 

  • [1] CocoaPodsの実行について

 [Add build step]をクリックして、[Update CocoaPods]を選択する。[Clean "Pods" folder]にチェックを入れると、前回のビルドで生成した「Pods」ディレクトリをクリーンする。

 

  • [2]Xcodeプロジェクトのビルドについて

 [Add build step]をクリックして、[Xcode]を選択すると、Xcodeプロジェクトのビルドに関する設定項目が表示される。

 

[General build settings]

 Target : Xcodeプロジェクトのターゲット名を入力(例:MyLocations)

 とりあえず、以下のように設定してみたぞ。

f:id:diinosimple:20141103180132p:plain

[Code signing & OS X keychain options]

 XcodeでのiOSアプリ開発環境と、Jenkins環境は同一マシンなので、今回は特に設定しなかった。

 

[Advanced Xcode build options]

 Clean test reportsを[Yes]に設定した以外は、なにもいじっていない。

 

[Versioning]

 ここもなにもいじらなかった

  • [3] xcodebuildコマンドによるテスト実行

 

 

  テストを実行する処理を追加するぞ![Add build step]」から[Execute shell]を選択して、以下のコマンドを入力する。これらのコマンドでは、iOSシミュレーターで実行できるテスト用のビルドと、テストの実施を行う。

f:id:diinosimple:20141103180608p:plain

 

[4] Gcovrによるテストのカバレッジファイルの出力

Gcorvを使ってテストのカバレッジファイルを出力する処理を追加する。[Add build step]から[Execute shell]を選択して、以下のコマンドを入力する。

f:id:diinosimple:20141103180859p:plain

 

(7) Post-build Actions

ビルド後にどのような処理を行うか設定する。

  • まずは、ipaファイルの保存だ。

 [Add post-build action]から、[Archive the artifacts]を選択し、ipaファイルの保存先を設定する。[Archive the artifacts]の[Files to archive]に[build/**/*.ipa]を設定する。これで[build]ディレクトリの中にipaファイルが生成されるようになる。

[Add post-build action]から、[Publish Cobertura Coverage Report]を選択し、[build/coverage.xml]を設定する。これでJenkinsのダッシュボードにカバレッジレポートが表示できるようになる。

 

f:id:diinosimple:20141103182202p:plain

 (8) ジョブの実行

 最後に[Save]-> [Apply]をクリックして、設定を適用する。Jenkinsの左パネルから[Build Now]を押すと、すぐにジョブ実行を開始できる。

f:id:diinosimple:20141103183110p:plain

 実行中のジョブのログは、Console Outputから確認できる。以下のようにBuild Historyで、青いアイコンが点滅しているジョブが現在実行中のジョブ。

f:id:diinosimple:20141103183404p:plain

f:id:diinosimple:20141103183348p:plain

上記の日時部分をクリックすると、以下のような実行中ジョブのダッシュボードが表示される。

f:id:diinosimple:20141103183428p:plain

 

このダッシュボードの左Pane上の[Console Ouput]をクリックすると、実行ジョブのコンソールログが表示される。

f:id:diinosimple:20141103183603p:plain

 

いずれかのジョブに失敗した場合は、Build History上、該当ジョブは、赤いアイコンで表示される。ログを確認しながら、該当の問題を解決しよう。下の例では、#21のジョブは、失敗している。すべてのジョブが成功すると、Build History上、該当ジョブは、青いアイコンで表示される。

f:id:diinosimple:20141103184011p:plain

 

 よーし、これで、Jenkinsによる自動ビルドとテストができるようになったぜ!

次はいよいよTestFlightでの自動配布を実装してみるぞ!