Jenkins Pipeline 发布 html 报告

标签 jenkins jmeter jenkins-plugins jenkins-pipeline jmeter-maven-plugin

Maven 全新安装在以下位置生成新的 html 文件

/var/lib/jenkins/workspace/Docs_LoadTest/target/jmeter/reports/DocsJmeterTests_20170601_151330/index.html

这里的“DocsJmeterTests_20170601_151330”每次运行都会改变。所以我尝试使用发布 html 报告插件来发布 html 报告。以下是我的管道脚本

node {
build job: 'Docs_LoadTest'
stage('Results') {
publishHTML([allowMissing: false,
         alwaysLinkToLastBuild: true,
         keepAll: true,
         reportDir: 
        '/var/lib/jenkins/workspace/Docs_LoadTest/target/jmeter/reports/*/',
         reportFiles: 'index.html',
         reportName: 'Docs Loadtest Dashboard'
         ])

 }
 }

运行作业时出现以下错误

[htmlpublisher] Archiving HTML reports...
[htmlpublisher] Archiving at BUILD level /var/lib/jenkins/workspace/Docs_LoadTest/target/jmeter/reports/* to /var/lib/jenkins/jobs/Docs_Pipeline/builds/10/htmlreports/Docs_Loadtest_Dashboard
ERROR: Specified HTML directory '/var/lib/jenkins/workspace/Docs_LoadTest/target/jmeter/reports/*' does not exist.

即使我们尝试了以下选项也不起作用

/var/lib/jenkins/workspace/Docs_LoadTest/target/jmeter/reports/**/ /var/lib/jenkins/workspace/Docs_LoadTest/target/jmeter/reports/DocsJmeterTests_* /var/lib/jenkins/workspace/Docs_LoadTest/target/jmeter/reports/DocsJmeterTests_* _*

最佳答案

HTML Publisher plugin似乎不理解通配符。您可以在 Pipeline 中使用 Linux 的复制命令,因为它可以使用通配符。

这会将 [Docs_LoadTest]/jmeter/reports 文件夹中所有目录的内容复制到本地工作区中的 jmeter_results 文件夹:

sh 'cp -r /var/lib/jenkins/workspace/Docs_LoadTest/target/jmeter/reports/*/. target/jmeter_results/'

请注意,您必须在运行之间清理 Docs_LoadTest 文件夹中的目标文件夹和管道,否则将使用此解决方案复制多个报告。

更好的解决方案:

将在 Docs_LoadTest 中应用此技巧并使用发布工件和复制工件功能。这可以解决必须硬编码到其他作业的路径的问题,并且即使 Pipeline 在 Docs_LoadTest 之外的另一个从属设备上执行,该方法也可以工作。这确实需要 Copy Artifacts plugin .

假设 Docs_LoadTest 是一个自由式作业:

  1. 添加一个执行Shell构建步骤,将结果复制到固定文件夹,例如jmeter_results:

    mkdir -p 目标/jmeter_results/ cp -r 目标/jmeter/报告/*/。目标/jmeter_results/

  2. 然后添加一个存档工件构建后存档步骤,其中包含以下要存档的文件:

    目标/jmeter_results/*

在您的管道中:

  • 使用“复制工件”步骤将文件复制到本地工作区中的 target/jmeter_results 文件夹:

    step ([$class: 'CopyArtifact', 项目名称:'Docs_LoadTest', 过滤器:'target/jmeter_results/*']);

  • 更改对 HTML 发布者的调用以使用此文件夹:

    publishHTML([allowMissing: false, 总是LinkToLastBuild:true, 保持全部:真实, 报告目录:'目标/jmeter_results', 报告文件:'index.html', 报告名称:“文档负载测试仪表板” ])

  • 关于Jenkins Pipeline 发布 html 报告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44306678/

    相关文章:

    Jenkins 触发调用/构建其他项目插件不评估我的环境变量

    docker - 我的剧本没有下载具有相同标签名称的更新图像

    Python:如何使用 lxml 解析带句点的 xml 标签?

    java - JMeter 使用 CSV 数据集填充嵌套的 json 请求正文

    jenkins - 如何链接手动触发的下游作业,同时传递参数?

    jenkins - 在 docker (dind) 中共享 docker.sock 或 docker

    Jenkins 安排代理节点可用性

    jenkins - 如何让 xunit 在失败时停止 Jenkins 管道?

    jmeter - 负载测试 RestFul Api ,一次性授权

    json - 在 Jmeter 中,如果我使用 Rest API 并从 CSV 文件中获取输入,那么 HTTP 请求采样器的正文数据部分中参数的语法是什么?