3

运行主项目后,每个下游项目都有测试结果,但“最新聚合测试结果”是没有测试。如何配置 Jenkins 以使所有测试结果显示在聚合列表中?

4

2 回答 2

11

聚合的下游测试结果不明显,也没有记录。以下步骤是从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 的配置

  1. 执行外壳

    echo $(date) > some_file.txt
    
  2. 归档工件

    • 文件设置为归档到文件some_file.text
  3. 汇总下游测试结果

    • 检查自动聚合...选项
  4. 构建其他项目

    • 要构建的项目设置为Job_B
  5. 记录文件指纹以跟踪使用情况

    • 要指纹的文件设置为some_file.txt

下游

Job_B 将运行,从触发此运行的上游作业复制文件 some_file.txt,将一些模拟测试结果回显到 XML 文件,然后发布该 XML 结果文件。发布的结果将聚合回 Job_A。

Job_B 的配置

  1. 从另一个项目复制工件

    项目名称 作业_A
    哪个构建 触发此作业的上游构建
    要复制的工件 some_file.txt
    指纹神器 ✔</td>
  2. 执行外壳

    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
    
  3. 发布 JUnit 测试结果报告

    • 使用文件results.xml设置测试报告 XML

这应该足以让 Job_A 聚合 Job_B 的测试结果。我不确定是否有办法/插件根据下游结果更改 Job_A 的状态(例如,如果 Job_B 失败,那么 Job_A 会追溯失败)。

于 2014-11-20T23:25:18.503 回答
2

对于 Scripted Pipeline,假设我有:

一项上游工作 -mainJob

两个下游作业 -downStreamJob1downStreamJob2.

要从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()

确保您拥有正确路径的最佳方法filterartifacts使用此 url 导航到每个下游作业中的工件,$BUILD_URL/artifact/其中BUILD_URL是此构建的完整 URL,例如http://server:port/jenkins/job/foo/ 15/

于 2019-07-19T12:30:59.230 回答