Jenkins Pipeline发布html报告

Saa*_*gar 4 jmeter jenkins jenkins-plugins jmeter-maven-plugin jenkins-pipeline

Maven clean install在以下位置生成新的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'
         ])

 }
 }
Run Code Online (Sandbox Code Playgroud)

运行作业时出现以下错误

[htmlpublisher]存档HTML报告...
[htmlpublisher]在BUILD级别存档/ var/lib/jenkins/workspace/Docs_LoadTest/target/jmeter/reports/*到/ var/lib/jenkins/jobs/Docs_Pipeline/builds/10/htmlreports/Docs_Loadtest_Dashboard
错误:指定的HTML目录'/ var/lib/jenkins/workspace/Docs_LoadTest/target/jmeter/reports/*'不存在.

即使我们尝试以下选项也没有奏效

/ 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_*_*

Joe*_*ers 8

HTML发布插件似乎并不明白通配符.您可以在管道中执行的操作是使用Linux的复制命令,因为它可以使用通配符.

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

sh 'cp -r /var/lib/jenkins/workspace/Docs_LoadTest/target/jmeter/reports/*/. target/jmeter_results/'
Run Code Online (Sandbox Code Playgroud)

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

更好的解决方案:

将在Docs_LoadTest中应用此技巧并使用"发布工件"和"复制工件"功能.这解决了必须硬编码到另一个作业的路径并且即使管道在Docs_LoadTest之外的另一个从站上执行也能工作.这确实需要Copy Artifacts插件.

假设Docs_LoadTest是自由式工作:

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

    mkdir -p target/jmeter_results/ cp -r target/jmeter/reports/*/. target/jmeter_results/

  2. 然后添加Archive Artifacts Post Build Archive Step并将以下文件存档:

    target/jmeter_results/*

在您的管道中:

  1. 使用"复制工件"步骤将文件复制到target/jmeter_results本地工作区中的文件夹:

    step ([$class: 'CopyArtifact', projectName: 'Docs_LoadTest', filter: 'target/jmeter_results/*']);

  2. 将调用更改为HTML发布者以使用此文件夹:

    publishHTML([allowMissing: false, alwaysLinkToLastBuild: true, keepAll: true, reportDir: 'target/jmeter_results', reportFiles: 'index.html', reportName: 'Docs Loadtest Dashboard' ])


vil*_*lkg 6

我遇到了类似的问题,只是我想发布多个报告。

我最终要做的是添加了一个简单的Groovy脚本来遍历reports目录中的文件。您可以使用相同/相似的方法来获取文件名。

 stage('publish reports') {
        steps {
            unstash 'source'

            script {
                sh 'ls target/jmeter/reports > listFiles.txt'
                def files = readFile("listFiles.txt").split("\\r?\\n");
                sh 'rm -f listFiles.txt'

                for (i = 0; i < files.size(); i++) {
                    publishHTML target: [
                        allowMissing:false,
                        alwaysLinkToLastBuild: false,
                        keepAll:true,
                        reportDir: 'target/jmeter/reports/' + files[i],
                        reportFiles: 'index.html',
                        reportName: files[i]
                    ]
                }                   
            }           
        }
    }
Run Code Online (Sandbox Code Playgroud)

注意:此示例用于声明式管道。有关readFile函数的文档。

  • 此答案将创建许多菜单项。如果您希望一个菜单项带有多个选项卡,则可以这样:`reportDir:'target / jmeter / reports',reportFiles:files.join(','),reportName:'jMeter Reports'`。用户`reportTitles`为标签赋予漂亮的名称。 (3认同)