はじめに
Jenkins のビルドは、結果を公開することで状況が把握しやすくなります。テストレポートを確認すればどのテストが成功または失敗したかが分かり、通知機能を利用すればチームは注意が必要なビルドに素早く気づくことができます。
この実験では、Jenkins ダッシュボードを使用して Freestyle ジョブを作成し、JUnit 形式の XML レポートを生成します。さらに、それを Jenkins のテストレポートとして公開し、メール通知の宛先を設定した上で、テストが失敗するケースを含めた 2 回目のビルドを実行します。
JUnit XML を生成するジョブの作成
このステップでは、JUnit XML ファイルを生成する Jenkins の Freestyle ジョブを作成します。JUnit XML は一般的なレポート形式であり、単純なシェルスクリプトから出力されたテストデータであっても、Jenkins はこれを読み取ることができます。
デスクトップインターフェースを開いてください。Firefox が自動的に Jenkins を開きます。もし開かない場合は、http://localhost:8080 にアクセスしてください。
Jenkins ダッシュボードから以下の操作を行います。
New Item をクリックし、test-report-demo と入力して Freestyle project を選択し、OK をクリックします。
設定ページで Build Steps セクションまでスクロールし、Add build step をクリックして Execute shell を選択します。
Command ボックスに以下のシェルスクリプトを入力します。
mkdir -p reports
printf '%s\n' \
'<testsuite name="LabExSuite" tests="2" failures="0" skipped="0">' \
' <testcase classname="demo.HealthTest" name="test_home_page"/>' \
' <testcase classname="demo.HealthTest" name="test_api_status"/>' \
'</testsuite>' > reports/junit.xml
echo "Generated passing JUnit report"
Save をクリックします。
保存後、ジョブのページが開きます。

ターミナルで以下のコマンドを実行し、保存されたシェルステップの内容を記録します。
docker exec jenkins sh -lc "grep -n -E 'reports/junit.xml|Generated passing JUnit report' /var/jenkins_home/jobs/test-report-demo/config.xml" | tee /home/labex/project/test-report-job-config.txt
JUnit テスト結果レポートの公開
このステップでは、JUnit XML ファイルを公開するためのビルド後の処理(Post-build action)を追加します。ビルドステップはビルド中にファイルを作成し、ビルド後の処理はビルド完了後にファイルを処理します。
test-report-demo ジョブのページで Configure をクリックします。
Post-build Actions セクションまでスクロールし、Add post-build action をクリックして Publish JUnit test result report を選択します。
Test report XMLs フィールドに以下を入力します。
reports/junit.xml
Save をクリックします。

以下のコマンドを実行して、保存された JUnit パブリッシャーの設定を記録します。
docker exec jenkins sh -lc "grep -n -E 'JUnitResultArchiver|<testResults>reports/junit.xml</testResults>' /var/jenkins_home/jobs/test-report-demo/config.xml" | tee /home/labex/project/junit-publisher-lines.txt
出力には JUnitResultArchiver と reports/junit.xml の両方が含まれているはずです。
ビルドの実行とテスト結果の確認
このステップでは、ジョブを実行して公開されたテストレポートを確認します。最初のレポートには 2 つの成功したテストが含まれているため、Jenkins はビルドを成功(SUCCESS)としてマークします。
test-report-demo ジョブのページで Build Now をクリックします。
ビルド履歴に #1 が表示されたら、それを開いて Test Result をクリックします。
テスト結果ページには失敗がゼロであり、demo パッケージがリストされていることが表示されます。

ターミナルで以下のコマンドを実行し、検証用に結果データを保存します。
curl -fsS http://localhost:8080/job/test-report-demo/1/api/json | grep '"result":"SUCCESS"' | tee /home/labex/project/passing-test-result.txt
curl -fsS http://localhost:8080/job/test-report-demo/1/testReport/api/json | grep '"failCount":0' | tee -a /home/labex/project/passing-test-result.txt
以下のように表示されるはずです。
"result":"SUCCESS"
"failCount":0
ビルド通知の宛先を追加する
このステップでは、Jenkins のメール通知の宛先を追加します。本番環境のコントローラーでは、メールを送信する前に SMTP 設定が必要ですが、この実験では、ジョブが通知の宛先をどこに保存するかという基本的な概念を理解することが重要です。
test-report-demo ジョブのページで Configure をクリックします。
Post-build Actions セクションまでスクロールし、Add post-build action をクリックして E-mail Notification を選択します。
Recipients フィールドに以下を入力します。
dev-team@example.com
Save をクリックします。

以下のコマンドを実行して、保存された通知設定を記録します。
docker exec jenkins sh -lc "grep -n -E 'hudson.tasks.Mailer|dev-team@example.com' /var/jenkins_home/jobs/test-report-demo/config.xml" | tee /home/labex/project/mail-notification-lines.txt
出力には、Jenkins のメーラーパブリッシャーと宛先アドレスが含まれているはずです。
テストを 1 つ失敗させて再ビルドする
このステップでは、JUnit レポートに 1 つの失敗したテストが含まれるようにシェルステップを更新します。Jenkins は JUnit テストが失敗したビルドを UNSTABLE としてマークします。これは、チームへの通知で強調されるべきビルド結果です。
test-report-demo ジョブのページで Configure をクリックします。
Execute shell ビルドステップを見つけ、コマンドを以下の失敗するレポートの内容に置き換えます。
mkdir -p reports
printf '%s\n' \
'<testsuite name="LabExSuite" tests="2" failures="1" skipped="0">' \
' <testcase classname="demo.HealthTest" name="test_home_page"/>' \
' <testcase classname="demo.HealthTest" name="test_api_status">' \
' <failure message="API returned 500">simulated failure</failure>' \
' </testcase>' \
'</testsuite>' > reports/junit.xml
echo "Generated failing JUnit report"
Save をクリックし、続いて Build Now をクリックします。
ビルド #2 が表示されたら、それを開いて Test Result をクリックします。ページには 1 つの失敗したテストが表示されるはずです。

以下のコマンドを実行して、不安定なビルドの証拠を保存します。
curl -fsS http://localhost:8080/job/test-report-demo/2/api/json | grep '"result":"UNSTABLE"' | tee /home/labex/project/unstable-test-result.txt
curl -fsS http://localhost:8080/job/test-report-demo/2/testReport/api/json | grep '"failCount":1' | tee -a /home/labex/project/unstable-test-result.txt
以下のように表示されるはずです。
"result":"UNSTABLE"
"failCount":1
まとめ
ダッシュボードから Jenkins の Freestyle ジョブを作成し、JUnit XML を生成し、ビルド後の処理として公開しました。また、成功および失敗したテストレポートを確認し、ジョブに対するメール通知の宛先を設定しました。