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
.