これはCMake + CTestをjenkinsに統合するのが簡単なようです。 cmakebuilder プラグインは設定が非常に簡単です(ソースツリーとビルドツリーを設定するだけです!)。ただし、CTestステップを呼び出す方法を理解できません。
メインの xUnitページ によると、バージョン1.58以降、CTestからのXML出力がサポートされています。 バグレポート を参照してください。
それは私が見つけることができたすべてのドキュメントについてです。 googleまたはstackoverflowで検索すると、手動の手順を必要とする非常に古いドキュメントしか見つかりません。
最近のジェンキンス(1.532.1)をxUnit(1.81)でセットアップする方法を知りたいです。 「ビルドステップの追加」を作成する必要がありますか? 「ビルド後のアクション」を作成する必要がありますか?ジェンキンスがそれらを統合できるように、CTestを実行して適切なXMLファイルを生成するには、何を入力する必要がありますか?
以下は、xUnitがCTestで生成されたXMLテスト結果ファイルを取得する方法を示す小さな例です。この例は、単一の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
を生成し、2つのCMakeテストからこの実行可能ファイルを実行します。ここでは、デモ目的で1つは常に失敗し、もう1つは常に成功します。
Jenkinsを使用して、新しいジョブをセットアップし、新しいcmakebuilderビルドステップを追加します。ローカルマシン上のサンプルプロジェクトを含むフォルダーをCMakeソースディレクトリにポイントします。 CMakeビルドディレクトリはbuild
に設定する必要があります。これにより、JenkinsはジョブのワークスペースディレクトリにCMakeビルドフォルダーを作成します。 _Clean Build
_フラグを設定して、ジョブが常にクリーンな状態で開始されるようにすることをお勧めします。
次に、UNIXを実行していると想定して、_Execute Shell
_ジョブステップを追加し、Command
ボックスに次のシェルスクリプトを入力します。
_cd build
/usr/local/bin/ctest --no-compress-output -T Test || /usr/bin/true
_
_-T Test
_オプションを指定してctest
を実行すると、CTestはビルドフォルダー内のサブフォルダーTesting
にXML出力ファイルを生成します。このファイルは、ビルド後のアクションでxUnit
プラグインによって取得できます。 _|| /usr/bin/true
_は、一部のテストが失敗した場合にJenkinsが(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
_を入力します。
Jenkins宣言型パイプラインでCTest出力を解析したい場合は、 (xUnit plugin を使用して簡単にこれを実行できます。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
プラグインを構成する方法の例については、 Jenkins Snippets Generator が非常に役立つリソースです。