1

Maven的干净安装在以下位置詹金斯管道发布HTML报告

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

这里“DocsJmeterTests_20170601_151330”将每次运行改变产生新的HTML文件。所以我试图发布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.

即使我们尝试下列选项didnt工作

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

+0

你可以提供更多关于jenkins设置的信息吗?有多个工人/从属节点吗?您的下游作业是否被触发设置为使用硬编码的工作区?下游工作的节点标签是否相同? –

回答

4

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. 添加Execute Shell生成步骤,其复制的结果到一个固定的文件夹中,例如jmeter_results

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

  2. 然后添加一个存档文物后生成与以下文件存档步骤进行存档:

    target/jmeter_results/*

在您的管道:

  • 使用Copy Arti事实上步将文件复制到target/jmeter_results文件夹在本地工作区:

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

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

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

  • 0

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

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

    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] 
            ] 
           }     
          }   
         } 
        } 
    

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