Получение результатов CTest в Дженкинсе (xUnit>= 1.58)
похоже, что это должно быть легко интегрировать CMake+CTest в jenkins. The cmakebuilder плагин чрезвычайно прост в настройке (просто установите исходное дерево и дерево сборки, готово!). Однако я не понимаю, как вызвать шаги CTest.
согласно основному страница xUnit, начиная с версии 1.58 поддерживается вывод XML из CTest, см. сообщить об ошибке.
Это все документы, которые я смог найти. когда я поиск в google или stackoverflow, я могу найти только очень старую документацию, требующую ручных шагов.
Я хотел бы знать, как настроить недавний jenkins (1.532.1) с xUnit (1.81). Должен ли я создать "Add build-step"? Должен ли я создать "действие после сборки"? Что мне нужно заполнить, чтобы запустить CTest и создать правильные XML-файлы, чтобы Дженкинс мог их интегрировать ?
2 ответов
вот небольшой пример, который демонстрирует, как xUnit забрать файл результатов теста XML, сгенерированный CTest. Пример состоит из одного исходного файла C++main.cpp
#include <cstdlib>
int main() {
std::exit(-1);
}
и сопроводительным CMakeLists.txt
:
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)
файл списка CMake генерирует исполняемый файл main
и запускает этот исполняемый файл из двух тестов CMake, где для демонстрационных целей Один всегда будет терпеть неудачу, а другой всегда будет успешным.
используя Jenkins, настройте новое задание и добавить новый шаг сборки cmakebuilder. Укажите исходный каталог CMake в папку, содержащую пример проекта на локальном компьютере. Каталог сборки CMake должен быть установлен в build
. Это заставит Дженкинса создать папку сборки CMake в каталоге рабочей области задания. Это хорошая идея, чтобы установить Clean Build
флаг, чтобы работа всегда начинается с чистого листа.
затем, предполагая, что вы используете Unix, добавьте Execute shell
шаг задания и введите следующие команды скрипт в Command
box:
cd build
/usr/local/bin/ctest --no-compress-output -T Test || /usr/bin/true
под управлением ctest
с параметром -T Test
заставит CTest генерировать выходной XML-файл в подпапке Testing
внутри папки сборки, которая может быть подобрана xUnit
plug-in в действии после сборки. The || /usr/bin/true
необходимо предотвратить преждевременное прерывание сборки Дженкинсом (без запуска подключаемого модуля xUnit) в случае сбоя некоторых тестов.
если вы используете Windows, настройте аналогичный Execute Windows batch command
шаг задания вместо этого:
cd build
"C:\Program Files (x86)\CMake 2.8\bin\ctest.exe" --no-compress-output -T Test || verify > NUL
наконец-то xUnit
плагин должен быть настроен следующим образом:
добавить Publish xUnit test result report
действие после сборки, а затем используйте плагин Add
кнопка для создания CTest-Version
отчет о результатах теста. В CTest-Version (default) Pattern
введите шаблон файла build/Testing/**/Test.xml
.
для тех, кто хочет проанализировать вывод CTest в декларативном конвейере Дженкинса, теперь вы можете сделать это довольно легко, используя плагин xUnit, так как он может анализировать вывод CTest напрямую.
добавьте этап в свой Jenkinsfile
для запуска ctest в каталоге сборки и добавления post
этап для обработки вывода с помощью xUnit. Вот пример скелета:
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()
}
}
}
для примеров того, как настроить xUnit
плагин в декларативном конвейере,Дженкинс Генератор Фрагментов является очень полезным ресурсом.