事象

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

note/Jenkins HTML Publisher Pluginで公開したhtmlで、CSSが読み込まれずスタイルが当たらない。 ブラウザのコンソールに以下のエラーメッセージが出ていた。

because it violates the following Content Security Policy directive: "default-src https: 'unsafe-inline'". Note that 'img-src' was not explicitly set, so 'default-src' is used as a fallback.

手順

HTMLを公開する

Jenkins の HTML Publisher Plugin を使って、Gauge が出したテスト結果の HTML レポートをいい感じに見れるようにする - ゆふてっく。

こちらのようにしてhtml,cssを作成した

pipeline {
  stages {
      stage('make html') {
          steps {
              sh '''
              mkdir -p report
              echo "<html><head> <link rel="stylesheet" href="index.css"> </head> <body><div>Hello, world</div></body></html>" > report/index.html
              echo "div { font-size: "20px"; }" > report/index.css
              '''
          }
      }
  }
  post {
      always {
          // 成果物を保存
          archiveArtifacts artifacts: 'report/*'
          // publish html
          publishHTML target: [
            allowMissing: false,
            alwaysLinkToLastBuild: true,
            keepAll: false,
            reportDir: 'report',
            reportFiles: '*',
            reportName: 'html-report'
          ]
      }
  }
}

${ジョブのURL}/${reportNameで指定した名前} でhtmlを開くことができるが、これだけだとスタイルがあたっていないため、Jenkins のセキュリティ設定を変更する。

一時的

Jenkinsの管理 > スクリプトコンソール にて以下を入力して実行する

System.setProperty("hudson.model.DirectoryBrowserSupport.CSP", "")

→ Jenkins再起動するとリセットされる

恒久的

Jenkinsの起動時オプションに指定することで常に適用させることができる。

sudo vi /etc/sysconfig/jenkins を開いて、 JENKINS_JAVA_OPTIONS を変更する。 空にするのは危なそうなので、必要な分だけ許可するようにする。

JENKINS_JAVA_OPTIONS="-Djava.awt.headless=true -Dhudson.model.DirectoryBrowserSupport.CSP=\"default-src 'self' 'unsafe-inline' 'unsafe-eval'; img-src 'self' 'unsafe-inline' data:;\""