Saltar al contenido

Jenkins Pipeline publica un informe html

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:

  1. 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/

  2. 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:

  1. 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/*']);

  2. 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.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *