介绍
当 Jenkins 构建能够发布结果时,它们会变得更易于理解。测试报告可以显示哪些测试通过或失败,而通知则能帮助团队及时关注需要处理的构建。
在本实验中,你将使用 Jenkins 仪表板创建一个自由风格任务,生成一个小型 JUnit XML 报告,将其发布为 Jenkins 测试报告,配置电子邮件通知接收人,并运行第二次包含失败测试的构建。
创建生成 JUnit XML 的任务
在此步骤中,你将创建一个编写 JUnit XML 文件的 Jenkins 自由风格任务。JUnit XML 是一种通用的报告格式,即使测试数据来自简单的 Shell 脚本,Jenkins 也能读取它。
打开桌面界面。Firefox 会自动打开 Jenkins。如果没有,请访问 http://localhost:8080。
在 Jenkins 仪表板中:
点击 New Item,输入 test-report-demo,选择 Freestyle project,然后点击 OK。
在配置页面,向下滚动到 Build Steps,点击 Add build step,然后选择 Execute shell。
在 Command 框中输入以下 Shell 脚本:
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。
保存后,任务页面将会打开。

在终端中运行此命令以记录已保存的 Shell 步骤:
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 测试结果报告
在此步骤中,你将添加一个构建后操作(Post-build action)来发布 JUnit XML 文件。构建步骤在构建过程中创建文件,而构建后操作则在构建完成后处理这些文件。
在 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。
运行构建并检查测试结果
在此步骤中,你将运行该任务并检查已发布的测试报告。第一份报告包含两个通过的测试,因此 Jenkins 应将构建标记为成功。
在 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 电子邮件通知接收人。在生产环境的控制器中,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 邮件发布器和接收人地址。
使测试失败并重新构建
在此步骤中,你将更新 Shell 步骤,使 JUnit 报告包含一个失败的测试。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。页面应显示一个失败的测试。

运行此命令以保存不稳定构建的证据:
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 自由风格任务,生成了 JUnit XML,通过构建后操作发布了它,检查了通过和失败的测试报告,并为该任务配置了电子邮件通知接收人。