jenkins cmake ctest

Produciendo resultados CTest en Jenkins(xUnit>=1.58)



cmake (2)

Parece que esto debería ser fácil de integrar CMake + CTest en jenkins. El complemento cmakebuilder es extremadamente fácil de configurar (simplemente configura el árbol de origen y el árbol de construcción, ¡listo!). Sin embargo, no entiendo cómo llamar a los pasos de CTest.

Según la página principal de xUnit , desde la versión 1.58 se admite la salida XML de CTest, vea el informe de errores .

Eso es sobre toda la documentación que pude encontrar. Cuando busco en google o en stackoverflow, solo puedo encontrar documentación muy antigua que requiere pasos manuales.

Me gustaría saber cómo configurar un jenkins reciente (1.532.1) con xUnit (1.81). ¿Debo crear un ''Agregar paso de compilación''? ¿Debo crear una ''acción posterior a la construcción''? ¿Qué debo completar para que CTest se ejecute y produzca los archivos XML adecuados, de modo que jenkins pueda integrarlos?


Para aquellos que deseen analizar la salida CTest en un Jenkins Declarative Pipeline, ahora puede hacer esto fácilmente usando el complemento xUnit , ya que puede analizar la salida CTest directamente.

Agregue una etapa en su Jenkinsfile para ejecutar ctest en el directorio de compilación, y agregue una etapa post para procesar la salida con xUnit. Aquí hay un ejemplo de esqueleto:

pipeline { agent any stages { stage(''Configure'') { steps { dir(''build'') { sh ''cmake ../'' } } } stage(''Build'') { steps { dir(''build'') { sh ''cmake --build .'' } } } stage(''Test'') { steps { dir(''build'') { sh ''ctest -T test --no-compress-output'' } } } } post { always { // Archive the CTest xml output archiveArtifacts ( artifacts: ''build/Testing/**/*.xml'', fingerprint: true ) // Process the CTest xml output with the xUnit plugin xunit ( testTimeMargin: ''3000'', thresholdMode: 1, thresholds: [ skipped(failureThreshold: ''0''), failed(failureThreshold: ''0'') ], tools: [CTest( pattern: ''build/Testing/**/*.xml'', deleteOutputFiles: true, failIfNotNew: false, skipNoTestFiles: true, stopProcessingIfError: true )] ) // Clear the source and build dirs before next run deleteDir() } } }

Para obtener ejemplos de cómo configurar el complemento xUnit en una canalización declarativa, el generador de fragmentos de Jenkins es un recurso muy útil.


Aquí hay un pequeño ejemplo que muestra cómo hacer que xUnit recoja un archivo de resultados de prueba XML generado por CTest. El ejemplo consiste en un único archivo fuente de C ++ main.cpp

#include <cstdlib> int main() { std::exit(-1); }

y un CMakeLists.txt acompañante:

cmake_minimum_required(VERSION 2.8) project(JenkinsExample) enable_testing() add_executable(main main.cpp) add_test(test1 main) add_test(test2 main) set_tests_properties(test2 PROPERTIES WILL_FAIL ON)

El archivo de lista de CMake genera un ejecutable main y ejecuta este ejecutable desde dos pruebas de CMake, donde para fines de demostración uno siempre fallará y el otro siempre tendrá éxito.

Utilizando Jenkins, configure un nuevo trabajo y agregue un nuevo paso de compilación de cmakebuilder. Apunte el directorio de origen de CMake a la carpeta que contiene el proyecto de ejemplo en su máquina local. El directorio de construcción de CMake debe configurarse para build . Esto hará que Jenkins cree una carpeta de compilación CMake en el directorio del área de trabajo del trabajo. Es una buena idea establecer el indicador de Clean Build para que el trabajo comience siempre con un estado limpio.

Luego, asumiendo que está ejecutando Unix, agregue un paso de trabajo de Execute shell e ingrese el siguiente script de shell en el cuadro Command :

cd build /usr/local/bin/ctest --no-compress-output -T Test || /usr/bin/true

Ejecutar ctest con la opción -T Test hará que CTest genere un archivo de salida XML en una subcarpeta Testing dentro de la carpeta de compilación, que puede ser recogida por el complemento xUnit en una acción posterior a la compilación. El || /usr/bin/true || /usr/bin/true es necesario para evitar que Jenkins aborte la compilación antes de tiempo (sin ejecutar el complemento xUnit) si algunas pruebas fallan.

Si está utilizando Windows, configure un paso de trabajo de Execute Windows batch command similar en su lugar:

cd build "C:/Program Files (x86)/CMake 2.8/bin/ctest.exe" --no-compress-output -T Test || verify > NUL

Finalmente, el complemento xUnit debe configurarse de la siguiente manera:

Agregue una acción posterior a la compilación del Publish xUnit test result report y luego use el botón Add del Add para crear un informe de resultados de prueba de la CTest-Version . En el CTest-Version (default) Pattern ingrese el patrón de archivo build/Testing/**/Test.xml .