Jenkins の HTML Publisher Plugin を使って、Gauge が出したテスト結果の HTML レポートをいい感じに見れるようにする
Jenkins の Declarative Pipeline でやる方法です。
特に Gauge のレポート専用という訳ではなく、「Jenkins ジョブ実行中に作られた HTML ファイルを、Jenkins UI 上でいい感じに見れるようにする方法」です。
前提
環境
- Jenkins: 2.164.3
- Jenkins プラグイン
- HTML Publisher: 1.18
HTML レポートの構成
Gauge の HTML レポートはこんな感じの構成で出力されます。
reports └── html-report ├── css/ ├── fonts/ ├── images/ ├── index.html ├── js/ └── (test_project)/
手順
1. ビルド中に生成される HTML レポートを成果物として保存する
Pipeline の post
セクションで、Gauge の出力する html-report
ディレクトリをゴソッと保存します。
これにより、ジョブを何度実行してもビルド毎のレポート一式を保持し続けられるようになります。
(参考: https://www.jenkins.io/doc/pipeline/steps/core/)
pipeline { stages { stage('execute test') { steps { // テスト実行する } post { always { archiveArtifacts artifacts: 'reports/html-report/**/*', fingerprint: true } } } } }
注意点
保存対象を reports/html-report/*
とすると reports/html-report/index.html
だけが保存されてしまいます。
reports/html-report/**/*
とすると、ちゃんと html-report/
配下をすべて保存してくれます。
2. HTML publisher で、保存した HTML レポートをジョブ画面に公開する
Pipeline の post
セクションで、保存した HTML レポートを公開します。
これにより、Jenkins のジョブページのサイドメニューに HTML レポートへのリンクが出現します。
(参考: https://www.jenkins.io/doc/pipeline/steps/htmlpublisher/)
pipeline { stages { stage('execute test') { steps { // テスト実行する } post { always { archiveArtifacts artifacts: 'reports/html-report/**/*', fingerprint: true publishHTML target: [ allowMissing: false, alwaysLinkToLastBuild: true, keepAll: false, reportDir: 'reports/html-report', reportFiles: 'index.html', reportName: 'HTML Report' ] } } } } }
3. Jenkins のセキュリティ設定を変更する
この時点では、index.html
を表示しても CSS などが何も読み込まれません。
Chrome の開発者ツールでコンソールを見ると以下のようなエラーが出ている状態です。
Blocked script execution in '<URL>' because the document's frame is sandboxed and the 'allow-scripts' permission is not set.
これは Jenkins のセキュリティ設定のためなので、正常に HTML レポートを読み込むためにはセキュリティ設定を下げる必要があります。
(参考:
https://www.jenkins.io/doc/book/system-administration/security/configuring-content-security-policy/
)
手っ取り早くセキュリティ設定を変更する
Jenkins で Jenkins の管理 -> スクリプトコンソール
を開き、以下のコマンドを実行します。
System.setProperty("hudson.model.DirectoryBrowserSupport.CSP", "")
コマンド実行後、即座に設定変更が反映され HTML レポートを正常に表示できるようになります。 (わたしの場合はブラウザキャッシュのクリアが必要でした。必ず必要かどうかは分かりません)
ただし、Jenkins の再起動などを行うと設定が元に戻ってしまうらしいです (まだ試してません)。
セキュリティ設定の変更を永続化する
Jenkins の起動時オプションで以下のように設定するらしいです (まだ試してません)。
java -Dhudson.model.DirectoryBrowserSupport.CSP="" -jar jenkins.war
備考
Jenkins 2.200 以降は、セキュリティ設定を変更するのではなく Resource Root URL というのを使っていい感じにできるっぽぃ?? のですが、会社の共用 Jenkins のバージョンは 2.164.3 なので 上記の方法を採りました。