[廚餘回收] 解決 Jenkins 內嵌 HTML Report 遇到 Content Security Policy 的問題

感謝天橋下的說書人先踩了雷「Pickles 與 Jenkins 的結合」。

Jenkins 的 HTML Publisher Plugin 可以方便我們瀏覽 HTML 格式的 Report,不過自從 Jenkins 1.641 開始遵循 Content Security Policy 後,HTML Report 如果有內含 CSS、JavaScript,它可能就不 work 了。

Jenkins 開始遵循 Content Security Policy 是件好事,Content Security Policy 主要是用來預防 XSS 攻擊的,但是對於 Jenkins Server 是放在 intranet 的朋友來講,或許不那麼能夠接受,所以還是有解決辦法的。

先照著官網說的方法設定

Jenkins 官網 Configuring Content Security Policy 頁面上的 HTML Publisher Plugin 區段,告訴我們從 1.10 開始,要執行 JavaScript 的話要去設定 DirectoryBrowserSupportscript-src 'unsafe-inline'

接著我們從 Jenkins 的 Jenkins Script Console 上執行 System.setProperty("hudson.model.DirectoryBrowserSupport.CSP", "script-src 'unsafe-inline'"),然後就會發現 HTML Report 還是 GG。

GG 了之後照著下面的方法設定

Content Security Policy 是一種白名單制度,在 Jenkins 是透過在 HTTP response header 裡面加入 Content-Security-Policy,來告訴瀏覽器說哪些外部資源可以載入跟執行,也因此只要把 header 拿掉或是把 header 的值設為空就行了,我們到 Jenkins 的安裝目錄底下找到 jenkins.xml,在 <arguments> 裡面加上 -Dhudson.model.DirectoryBrowserSupport.CSP=

大功告成

參考資料

相關資源

C# 指南
ASP.NET 教學
ASP.NET MVC 指引
Azure SQL Database 教學
SQL Server 教學
Xamarin.Forms 教學