テストができたら毎日実行するように設定しましょう。そうすることで、開発期間中に発生した問題をすばやく検出できます。毎日と言わずソースコードに変更が入るたびに実行しても良いのですが、最初のステップとしてまずは1日1回テストを実行してみましょう。
ここでは、CI(継続的インテグレーション)ツールJenkinsを使って、テストを定期的に実行する方法を説明します。今回はMac PC上に手軽にJenkinsをセットアップして試す方法を説明します。
セットアップ
- こちらの手順に従い、Java9をインストールします。
- 続いて、Jenkinsをインストールして使ってみようの記事に従い、JenkinsをMac PC上にセットアップします。
- 記事の内容に従い、「管理者パスワードの入力」「推奨プラグインのインストール」「初期ユーザー登録」を行ってください。図1の画面が表示されます。
- さらに、同じ記事の「実行してみよう」のセクションに従い、「Jobの登録」と「Jobの実行」を行ってみてください。Jobが成功すれば、セットアップは完了です(図2)。
図1 Jenkinsの起動画面
図2 Jobの成功画面
MagicPodテスト実行Jobの作成
セットアップが完了したら、いよいよテスト実行のJobを作成してみましょう。
Jobの作成
まずは、先ほどと同様、適当な名前で「フリースタイル」のJobを作成します。
MagicPodDesktopのセットアップ
Jenkinsと同じMac PCにMagicPodDesktopを配置し、右クリックして「開く」から起動します。起動したら、認証情報を入力してログインしておきます(いったんログインすればPCに認証情報が保存されるので、次回からはログインの作業は不要です)。
作業が完了したら、MagicPodDesktopを終了します。起動したままにすると、テストの実行が失敗してしまいます。
設定ファイルの編集
こちらに従い、テスト実行に必要な設定ファイルmagic_pod_config.jsonを編集します。
- 「xmlTestOutput」にはtrueを指定します。これで、テスト結果が、Jenkinsが読み込むためのXMLファイルとして作業ディレクトリに出力されます。
- 「workDir」には、
<Jenkinsのワークスペース>/magic-pod-work
(例: /Users/<ユーザー名>/.jenkins/workspace/<ジョブ名>/magic-pod-work)を指定すると良いでしょう。
ビルド手順「シェルの実行」の追加
作成したJobの「設定」をクリックして設定画面に移動し、「ビルド手順の追加」から「シェルの実行」を選択して追加します(図3)。
追加したら、「シェルスクリプト」の欄に"<MagicPodDesktop.app へのパス>/Contents/MacOS/MagicPodDesktop" run --magic_pod_config="<magic_pod_config.jsonへのパス>"
のようにスクリプトを記述します(図4)。
図3 「シェルの実行」の追加
図4 「シェルスクリプト」の設定
ビルド後の処理「JUnitテスト結果の集計」の追加
同様に、 「ビルド後の処理」から「JUnitテスト結果の集計」を選んで追加し、図5のように「テスト結果XML」に相対パスで<workDirの場所>/*.xml
を指定します。一度もテストを実行していないと、赤文字でディレクトリが存在しないという警告が出ますが、一度テストを実施すればXMLが生成されてエラーが解消されるはずです。
図5 「JUnitテスト結果の集計」の設定
JOBの実行
設定を保存し、JOBを実行してみてください。JOBが完了すると、結果画面にテストごとの結果へのリンクが作成されます(図6)。
図6 テスト結果へのリンク
テスト結果のメール・チャット通知
テストの実行結果は、メールやSlackなどのチャットで通知することができます。
メール通知を行うには、Jenkinsでビルドが失敗したらGmailに通知する方法の手順に従い、「メールサーバの設定」と「ジョブ側の設定」を行ってください。これで、テスト失敗時にメールが送信されるようになります。
Slackへの通知を行うには、Jenkinsのビルド結果をSlackに通知させるの手順に従いSlackとJenkinsの設定を行ってください。
テストを定期的に実行する
テストを定期的に実行するには、Jenkinsでジョブを定期的に実行するの設定を行ってください。
例えば毎日12時頃にテストを実行したいなら、「スケジュール」にH 12 * * *
と記載すれば良いでしょう。
さらなる改善
ここで紹介した設定は、ごく基本的なものです。本格的な運用にあたっては、以下のようなさらなる改善が考えられます。
- Jenkinsサーバに固定IPを割り当てて、社内の誰でも見られるようにする
- Jenkinsの「拡張E-mail通知」の機能を使い、さらにメール送信の方法を細かく指定する