Mavenクリーンインストールは、次の場所に新しいhtmlファイルを生成します
/var/lib/jenkins/workspace/Docs_LoadTest/target/jmeter/reports/DocsJmeterTests_20170601_151330/index.html
ここで、「DocsJmeterTests_20170601_151330」は実行ごとに変更されます。だから私はpublishhtmlreportプラグインを使ってhtmlreportを公開しようとしています。以下は私のパイプラインスクリプトです
node {
build job: 'Docs_LoadTest'
stage('Results') {
publishHTML([allowMissing: false,
alwaysLinkToLastBuild: true,
keepAll: true,
reportDir:
'/var/lib/jenkins/workspace/Docs_LoadTest/target/jmeter/reports/*/',
reportFiles: 'index.html',
reportName: 'Docs Loadtest Dashboard'
])
}
}
ジョブの実行中に次のエラーが発生する
[htmlpublisher] HTMLレポートのアーカイブ...
[htmlpublisher] BUILDレベルでのアーカイブ/ var/lib/jenkins/workspace/Docs_LoadTest/target/jmeter/reports/*から/ var/lib/jenkins/jobs/Docs_Pipeline/builds/10/htmlreports/Docs_Loadtest_Dashboard
エラー:指定されたHTMLディレクトリ '/ var/lib/jenkins/workspace/Docs_LoadTest/target/jmeter/reports/*'が存在しません。
次のオプションを試してもうまくいきませんでした
/ var/lib/jenkins /ワークスペース/ Docs_LoadTest/target/jmeter/reports/** // var/lib/jenkins/workspace/Docs_LoadTest/target/jmeter/reports/DocsJmeterTests _ */var/lib/jenkins/workspace/Docs_LoadTest/target/jmeter/reports/DocsJmeterTests_ * _ *
HTML Publisherプラグイン はワイルドカードを理解していないようです。パイプラインでできることは、Linuxのcopyコマンドを使用することです。これは、ワイルドカードで機能するためです。
これにより、_[Docs_LoadTest]/jmeter/reports
_フォルダー内のすべてのディレクトリの内容がローカルワークスペース内の_jmeter_results
_フォルダーにコピーされます。
_sh 'cp -r /var/lib/jenkins/workspace/Docs_LoadTest/target/jmeter/reports/*/. target/jmeter_results/'
_
_Docs_LoadTest
_フォルダー内のターゲットフォルダーと実行の間にパイプラインの両方をクリーンアップする必要があることに注意してください。そうしないと、このソリューションで複数のレポートがコピーされます。
より良い解決策:
このトリックをDocs_LoadTestに適用し、アーティファクトの公開機能とアーティファクトのコピー機能を使用します。これは、他のジョブへのパスをハードコードする必要があることを回避し、パイプラインがDocs_LoadTest以外のスレーブで実行された場合でも機能します。これには Copy Artifactsプラグイン が必要です。
_Docs_LoadTest
_がフリースタイルの仕事であると仮定します。
結果を固定フォルダーにコピーする_Execute Shell
_ビルドステップを追加します。 _jmeter_results
_:
_mkdir -p target/jmeter_results/ cp -r target/jmeter/reports/*/. target/jmeter_results/
_
次に、アーカイブする次のファイルを使用して、アーカイブアーティファクトのビルド後アーカイブステップを追加します。
_target/jmeter_results/*
_
パイプライン内:
アーティファクトのコピー手順を使用して、ファイルをローカルワークスペースの_target/jmeter_results
_フォルダーにコピーします。
step ([$class: 'CopyArtifact', projectName: 'Docs_LoadTest', filter: 'target/jmeter_results/*']);
このフォルダーを使用するには、HTMLパブリッシャーへの呼び出しを変更します。
publishHTML([allowMissing: false, alwaysLinkToLastBuild: true, keepAll: true, reportDir: 'target/jmeter_results', reportFiles: 'index.html', reportName: 'Docs Loadtest Dashboard' ])
私も同様の問題を抱えていましたが、複数のレポートを公開したかっただけです。
私がやったことは、レポートディレクトリ内のファイルを反復処理するための単純なGroovyスクリプトを追加したことです。同じ/類似のアプローチを使用してファイル名を取得できます。
stage('publish reports') {
steps {
unstash 'source'
script {
sh 'ls target/jmeter/reports > listFiles.txt'
def files = readFile("listFiles.txt").split("\\r?\\n");
sh 'rm -f listFiles.txt'
for (i = 0; i < files.size(); i++) {
publishHTML target: [
allowMissing:false,
alwaysLinkToLastBuild: false,
keepAll:true,
reportDir: 'target/jmeter/reports/' + files[i],
reportFiles: 'index.html',
reportName: files[i]
]
}
}
}
}
注:この例は、宣言型パイプラインで使用されます。 readFile 関数に関するドキュメント。
私は単に以下を試しました。
stage('Test-Junit') {
steps {
sh 'gradle test'
}
post {
always {
script {
def moduleNames = ["app", "core", ...]
for(i=0; i<moduleNames.size(); i++ ) {
publishHTML target: [
allowMissing:false,
alwaysLinkToLastBuild: false,
keepAll:true,
reportDir: moduleNames[i] + '/build/reports/tests/test',
reportFiles: 'index.html',
reportName: 'Test Report:' + moduleNames[i]
]
}
}
}
}
}
すべてのモジュールがレポートされるため、プロジェクトのダッシュボードの左側のナビゲーションバーに表示されます。