Solución:
El complemento HTML Publisher no parece comprender los comodines. Lo que podría hacer en su Pipeline es usar el comando copy de Linux, ya que puede funcionar con comodines.
Esto copia el contenido de todos los directorios en el [Docs_LoadTest]/jmeter/reports
carpeta a una jmeter_results
carpeta en el espacio de trabajo local:
sh 'cp -r /var/lib/jenkins/workspace/Docs_LoadTest/target/jmeter/reports/*/. target/jmeter_results/'
Tenga en cuenta que debe limpiar tanto la carpeta de destino en el Docs_LoadTest
carpeta y su canalización entre ejecuciones; de lo contrario, se copiarán varios informes con esta solución.
Una mejor solucion:
Sería aplicar este truco en Docs_LoadTest y usar las funciones Publicar artefacto y Copiar artefacto. Esto evita tener que codificar la ruta al otro trabajo y funcionará incluso si Pipeline se ejecuta en otro esclavo que no sea Docs_LoadTest. Esto requiere el complemento Copiar artefactos.
Asumiendo Docs_LoadTest
es un trabajo de Freestyle:
-
Agregar un
Execute Shell
Paso de compilación que copia los resultados a una carpeta fija, p. Ej.jmeter_results
:mkdir -p target/jmeter_results/
cp -r target/jmeter/reports/*/. target/jmeter_results/ -
Luego, agregue un paso de archivo de compilación posterior a los artefactos de archivo con los siguientes archivos para archivar:
target/jmeter_results/*
En su Pipeline:
-
Utilice el paso Copiar artefacto para copiar los archivos a
target/jmeter_results
carpeta en el espacio de trabajo local:step ([$class: 'CopyArtifact',
projectName: 'Docs_LoadTest',
filter: 'target/jmeter_results/*']); -
Cambie la llamada al editor HTML para usar esta carpeta:
publishHTML([allowMissing: false,
alwaysLinkToLastBuild: true,
keepAll: true,
reportDir: 'target/jmeter_results',
reportFiles: 'index.html',
reportName: 'Docs Loadtest Dashboard'
])
Tenía un problema similar, solo que quería publicar varios informes.
Lo que terminé haciendo fue agregar un script simple y maravilloso para iterar a través de los archivos en el directorio de informes. Puede utilizar el mismo enfoque o similar para obtener el nombre del archivo.
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]
]
}
}
}
}
Nota: este ejemplo se utiliza en canalización declarativa. Documentos sobre la función readFile.