HTML Publisherプラグイン

テストツールの中にはHTMLでレポートを出力するものがあります。Jenkinsの HTML publisherプラグインを使うと、CIの結果レポートをJenkinsのコンソールに統合できます。

  • プラグイン管理画面からHTML publisherをインストール
  • CSPの設定を追加する
  • Pipelineの最後で、 publishHTML()ステップを呼び出す

CSPの設定を追加する

Jenkinsのデフォルト設定では、 CSPの設定にガードされて、レポートを表示できません。
この場合、ロード中の画面表示にくわえてブラウザのコンソールにエラーが出ます。

CSPの設定を変えるには、Jenkins起動時のJavaフラグhudson.model.DirectoryBrowserSupport.CSPを適切に設定する必要があります。

Rubyのsimple-covのレポートの例では、以下のパラメータセットで動作しています。

-Dhudson.model.DirectoryBrowserSupport.CSP="sandbox allow-same-origin allow-scripts; default-src 'self'; style-src 'self' 'unsafe-inline'; script-src 'self' 'unsafe-inline'"

許容する設定を増やすほど表示可能な対象は増えますが、セキュリティレベルは下がります。動作する設定を探るのは難しいですが、ブラウザのエラーメッセージを確認しながら追加すると良いでしょう。 また、クオートが多いため必要に応じてエスケープにも注意します。

2020年に導入されたSameSite cookieの挙動変更による追加リソース読込みの403エラーについては、 issue trackerに議論があります。CSPにallow-same-originを追加する手法が比較的セキュアではないかと思います。上の設定例ではこの点を反映し、動作を確認できています。

publishHTMLステップ

publishHTMLのオプションについては、Pipelineスクリプトビルダーで生成すると適切に記述できます。 Rubyのsimplecovの場合、以下のような設定で適切に動作しています。reportDirがポイントになるでしょう。

publishHTML([allowMissing: false, alwaysLinkToLastBuild: true, keepAll: false, reportDir: 'coverage/', reportFiles: 'index.html', reportName: 'Coverage Report', reportTitles: ''])

一度レポート生成に成功すると、ジョブの左ナビにレポートへのリンクが追加されます。ただし、初回はジョブ自体も成功しないとリンクが出ません。一度表示されたあとは、ジョブが失敗してもレポートは更新されます。

テスト結果とジョブのステータスを連動させている場合には注意が必要です。

まとめ

HTML publisherはHTML出力レポートを幅広く組み込めるため、汎用性があります。
従来、simplecovのJenkins統合にはsimplecov-rcovで変換してRubyに特化したプラグインで統合していましたが、この方式は近年アップデートがありません。

HTML publisherを用いるとsimplecov-rcovは不要になり、より簡素な構成で統合できます。

中馬崇尋
Chuma Takahiro