运行主项目后,每个下游项目都有测试结果,但“最新聚合测试结果”是没有测试。如何配置 Jenkins 以使所有测试结果显示在聚合列表中?
2 回答
聚合的下游测试结果不明显,也没有记录。以下步骤是从How To Aggregate Downstream Test Results in Hudson合成的。
要进行聚合,您需要在上游作业中归档工件,对工件进行指纹识别,然后将工件从上游作业传递到下游作业。用我自己的话:
共享的指纹工件将作业“绑定”在一起,并允许上游作业查看下游测试结果
为了证明这一点,我们可以在两个自由式作业 Job_A 和 Job_B 之间建立一个非常简单的流程。
上游的
Job_A 将运行并创建一个名为some_file.txt的工件。我们没有汇总 some_file.txt 的值/内容,但它需要进行指纹识别,因此不能为空。然后 Job_A 将触发 Job_B 的构建。
Job_A 的配置:
执行外壳:
echo $(date) > some_file.txt
归档工件:
- 将文件设置为归档到文件some_file.text
汇总下游测试结果:
- 检查自动聚合...选项
构建其他项目:
- 将要构建的项目设置为Job_B
记录文件指纹以跟踪使用情况:
- 将要指纹的文件设置为some_file.txt
下游
Job_B 将运行,从触发此运行的上游作业复制文件 some_file.txt,将一些模拟测试结果回显到 XML 文件,然后发布该 XML 结果文件。发布的结果将聚合回 Job_A。
Job_B 的配置:
从另一个项目复制工件:
项目名称 作业_A 哪个构建 触发此作业的上游构建 要复制的工件 some_file.txt 指纹神器 ✔</td> 执行外壳:
XML_VAR='<testsuite tests="3"> <testcase classname="foo" name="ASuccessfulTest"/> <testcase classname="foo" name="AnotherSuccessfulTest"/> <testcase classname="foo" name="AFailingTest"> <failure type="ValueError">Not enough foo!!</failure> </testcase> </testsuite>' echo $XML_VAR > results.xml
发布 JUnit 测试结果报告:
- 使用文件results.xml设置测试报告 XML
这应该足以让 Job_A 聚合 Job_B 的测试结果。我不确定是否有办法/插件根据下游结果更改 Job_A 的状态(例如,如果 Job_B 失败,那么 Job_A 会追溯失败)。
对于 Scripted Pipeline,假设我有:
一项上游工作 -mainJob
两个下游作业 -downStreamJob1
和downStreamJob2
.
要从downstreamJob1
和聚合测试结果downStreamJob2
,Jenkinsfile 如下所示:
downStreamJob1 Jenkinsfile -存档和指纹测试结果 xml
archiveArtifacts allowEmptyArchive: true,
artifacts: **/test-results/test/*.xml,
fingerprint: true, defaultExcludes: false
downStreamJob2 Jenkinsfile -存档和指纹测试结果 xml
archiveArtifacts allowEmptyArchive: true,
artifacts: **/output/junit-report/*.xml,
fingerprint: true, defaultExcludes: false
artifacts
使用 Fileset 获取所有测试报告 XML的路径。在此处阅读有关文件集的更多信息
mainJob Jenkinsfile -从每个下游作业复制工件
copyArtifacts filter: 'build/test-result/test/*.xml', fingerprintArtifacts: true, projectName: 'downStreamJob1', selector: lastCompleted()
copyArtifacts filter: 'output/junit-report/*.xml', fingerprintArtifacts: true, projectName: 'downStreamJob2', selector: lastCompleted()
确保您拥有正确路径的最佳方法filter
是artifacts
使用此 url 导航到每个下游作业中的工件,$BUILD_URL/artifact/
其中BUILD_URL是此构建的完整 URL,例如http://server:port/jenkins/job/foo/ 15/