web-dev-qa-db-ja.com

JenkinsPipelineがHTMLレポートを公開

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_ * _ *

4
Saagar

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_がフリースタイルの仕事であると仮定します。

  1. 結果を固定フォルダーにコピーする_Execute Shell_ビルドステップを追加します。 _jmeter_results_:

    _mkdir -p target/jmeter_results/ cp -r target/jmeter/reports/*/. target/jmeter_results/_

  2. 次に、アーカイブする次のファイルを使用して、アーカイブアーティファクトのビルド後アーカイブステップを追加します。

    _target/jmeter_results/*_

パイプライン内:

  1. アーティファクトのコピー手順を使用して、ファイルをローカルワークスペースの_target/jmeter_results_フォルダーにコピーします。

    step ([$class: 'CopyArtifact', projectName: 'Docs_LoadTest', filter: 'target/jmeter_results/*']);

  2. このフォルダーを使用するには、HTMLパブリッシャーへの呼び出しを変更します。

    publishHTML([allowMissing: false, alwaysLinkToLastBuild: true, keepAll: true, reportDir: 'target/jmeter_results', reportFiles: 'index.html', reportName: 'Docs Loadtest Dashboard' ])

6
Joep Weijers

私も同様の問題を抱えていましたが、複数のレポートを公開したかっただけです。

私がやったことは、レポートディレクトリ内のファイルを反復処理するための単純な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 関数に関するドキュメント。

0
vilkg

私は単に以下を試しました。

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]
                        ]
                    }
                }   
            }
        }
    }

すべてのモジュールがレポートされるため、プロジェクトのダッシュボードの左側のナビゲーションバーに表示されます。