mal*_*lat 27 cmake ctest jenkins
看起来这应该很容易在jenkins中集成CMake + CTest.该cmakebuilder插件是非常容易配置(刚才设置的源树和构建树,完成了!).但是我无法理解如何调用CTest步骤.
根据主要的xUnit页面,从版本1.58开始,支持CTest的XML输出,请参阅错误报告.
这就是我能找到的所有文件.当我在google或stackoverflow上搜索时,我只能找到需要手动步骤的非常旧的文档.
我想知道如何使用xUnit(1.81)设置最近的jenkins(1.532.1).我应该创建一个"添加构建步骤"吗?我应该创建一个"构建后动作"吗?我需要填写什么才能让CTest运行并生成正确的XML文件,以便jenkins可以集成它们?
sak*_*kra 46
这是一个小例子,演示如何让xUnit选择CTest生成的XML测试结果文件.该示例包含单个C++源文件main.cpp
#include <cstdlib>
int main() {
std::exit(-1);
}
Run Code Online (Sandbox Code Playgroud)
并附带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)
Run Code Online (Sandbox Code Playgroud)
CMake列表文件生成可执行文件main并从两个CMake测试中运行此可执行文件,出于演示目的,一个将始终失败,另一个将始终成功.
使用Jenkins,设置一个新工作并添加新的cmakebuilder构建步骤.将CMake源目录指向包含本地计算机上的示例项目的文件夹.CMake构建目录应设置为build.这将使Jenkins在作业的工作空间目录中创建一个CMake构建文件夹.设置Clean Build标志以使作业始终以干净状态开始是个好主意.
然后,假设您正在运行Unix,请添加Execute shell作业步骤并在Command框中输入以下shell脚本:
cd build
/usr/local/bin/ctest --no-compress-output -T Test || /usr/bin/true
Run Code Online (Sandbox Code Playgroud)
ctest使用该选项运行-T Test将使CTest Testing在build文件夹内的子文件夹中生成XML输出文件,然后可以通过xUnit后置构建操作中的插件拾取该文件.在|| /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
Run Code Online (Sandbox Code Playgroud)
最后xUnit,必须按以下方式配置插件:
添加Publish xUnit test result report构建后操作,然后使用插件的Add按钮创建CTest-Version测试结果报告.在CTest-Version (default) Pattern输入文件模式中build/Testing/**/Test.xml.
对于那些想在Jenkins声明性管道中解析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()
}
}
}
Run Code Online (Sandbox Code Playgroud)
有关如何xUnit在声明式管道中配置插件的示例,Jenkins代码段生成器是非常有用的资源。
| 归档时间: |
|
| 查看次数: |
12957 次 |
| 最近记录: |