notebook

都内でWEB系エンジニアやってます。

JenkinsでRubycriticの結果レポートをPublishHTMLPluginで表示する

CIの中でプロジェクトのコードの静的解析にRubycriticを使ってレポートを表示しようとしていました

実行に関してはスクリプトを用意して実行するだけなので問題なかったのですがHTMLのレポート表示で躓いたのでメモ

Rubycritic

  • 静的解析ツール
  • 内部的には下記を使っています
    • Reek
      • コード中の読みにくい、保守しづらい箇所を検出
      • 設定を上書きできる(reekの設定を使用)
    • flay
      • コードの類似性を検出
      • default設定
    • flog
      • コードの複雑度を計測
      • default+α

レポート表示

Publish HTML Pluginを使えばサクッとできるかと思ったけどそんなに甘くはなかったです

ビルド設定 → Publish HTML Pluginの設定で成果物のパスの設定を行いビルドの実行、楽勝やろ!と思いみてみたら

  • webfontの表示がされない
  • javascriptの実行が許可されていない

結果こんな感じになりました

f:id:swfz:20190203215337p:plain

出てきたエラーは下記

  • webfont
Access to font at 'https://domain/job/project/HTML_20Report/assets/fonts/fontawesome-webfont.ttf?v=4.7.0' from origin 'null' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.
  • script
Blocked script execution in 'https://domain/job/project/HTML_20Report/overview.html' because the document's frame is sandboxed and the 'allow-scripts' permission is not set.
  • script
Refused to load the font '<URL>' because it violates the following Content Security Policy directive: "default-src 'none'". Note that 'font-src' was not explicitly set, so 'default-src' is used as a fallback.

調べてみたら下記の記事に行き着きました

Configuring Content Security Policy - Jenkins - Jenkins Wiki

wiki.jenkins.io

Jenkins - HTML Publisher Plugin - No CSS is displayed when report is viewed in Jenkins Server - Stack Overflow

stackoverflow.com

Jenkins - HTML Publisher Plugin - No CSS is displayed when report is viewed in Jenkins Server - Stack Overflow

stackoverflow.com

設定変えればOKだよということなので設定を変えてみます

一時的ならスクリプトコンソールから実行できるのでスクリプトコンソールで下記コマンドを実行します

System.setProperty("hudson.model.DirectoryBrowserSupport.CSP", "sandbox allow-same-origin allow-scripts; default-src 'self'; script-src * 'unsafe-inline'; img-src *; style-src * 'unsafe-inline'; font-src *")

f:id:swfz:20190203215407p:plain

これで一応グラフ(hightchart)の表示までできた、、、がunsafeなものも実行するということなので注意が必要ですね

なおデフォルトは下記らしいです

System.setProperty("hudson.model.DirectoryBrowserSupport.CSP", "sandbox; default-src 'none'; img-src 'self'; style-src 'self';")