Jenkins 管道发布 html 报告
Jenkins Pipeline publish html report
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'
])
}
}
运行执行作业时出现以下错误
[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好像不太懂通配符。您可以在流水线中使用 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 中应用此技巧并使用发布工件和复制工件功能。这解决了必须对其他作业的路径进行硬编码的问题,即使管道在 Docs_LoadTest 之外的另一个从属设备上执行,它也能正常工作。这确实需要 Copy Artifacts plugin.
假设 Docs_LoadTest
是自由式工作:
添加 Execute Shell
构建步骤,将结果复制到固定文件夹,例如jmeter_results
:
mkdir -p target/jmeter_results/
cp -r target/jmeter/reports/*/. target/jmeter_results/
然后添加一个 Archive Artifacts Post Build Archive Step 将以下文件归档:
target/jmeter_results/*
在您的管道中:
使用 Copy Artifact 步骤将文件复制到本地工作区中的 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'
])
我遇到了类似的问题,只是我想发布多个报告。
我最后做的是添加简单的 groovy 脚本来遍历报告目录中的文件。您可以使用 same/similar 方法获取文件名。
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 函数的文档。
我简单地尝试了以下方法。
stage('Test-Junit') {
steps {
sh 'gradle test'
}
post {
always {
script {
def moduleNames = ["app", "core", ...]
for(i=0; i<moduleNames.size(); i++ ) {
publishHTML target: [
allowMissing:false,
alwaysLinkToLastBuild: false,
keepAll:true,
reportDir: moduleNames[i] + '/build/reports/tests/test',
reportFiles: 'index.html',
reportName: 'Test Report:' + moduleNames[i]
]
}
}
}
}
}
它将生成所有模块报告,因此您可以在项目仪表板的左侧导航栏中找到它们。
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'
])
}
}
运行执行作业时出现以下错误
[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好像不太懂通配符。您可以在流水线中使用 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 中应用此技巧并使用发布工件和复制工件功能。这解决了必须对其他作业的路径进行硬编码的问题,即使管道在 Docs_LoadTest 之外的另一个从属设备上执行,它也能正常工作。这确实需要 Copy Artifacts plugin.
假设 Docs_LoadTest
是自由式工作:
添加
Execute Shell
构建步骤,将结果复制到固定文件夹,例如jmeter_results
:mkdir -p target/jmeter_results/ cp -r target/jmeter/reports/*/. target/jmeter_results/
然后添加一个 Archive Artifacts Post Build Archive Step 将以下文件归档:
target/jmeter_results/*
在您的管道中:
使用 Copy Artifact 步骤将文件复制到本地工作区中的
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' ])
我遇到了类似的问题,只是我想发布多个报告。
我最后做的是添加简单的 groovy 脚本来遍历报告目录中的文件。您可以使用 same/similar 方法获取文件名。
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 函数的文档。
我简单地尝试了以下方法。
stage('Test-Junit') {
steps {
sh 'gradle test'
}
post {
always {
script {
def moduleNames = ["app", "core", ...]
for(i=0; i<moduleNames.size(); i++ ) {
publishHTML target: [
allowMissing:false,
alwaysLinkToLastBuild: false,
keepAll:true,
reportDir: moduleNames[i] + '/build/reports/tests/test',
reportFiles: 'index.html',
reportName: 'Test Report:' + moduleNames[i]
]
}
}
}
}
}
它将生成所有模块报告,因此您可以在项目仪表板的左侧导航栏中找到它们。