テストツールの中には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