一. jenkins未展示css樣式的原理
官方解釋:https://stackoverflow.com/questions/35783964/jenkins-html-publisher-plugin-no-css-is-displayed-when-report-is-viewed-in-j
簡單來說,就是jenkins出於安全考慮,禁止了css和js的加載
詳細原因:
Jenkins中配置的CSP(Content Security Policy)
這是Jenkins的一個安全策略,默認會設置了默認的權限權限集:sandbox; default-src 'none'; img-src 'self'; style-src 'self';
防止Jenkins用戶在workspace、/userContent、archived artifacts中受到惡意HTML/JS文件的攻擊。
在該配置下,只允許加載:
- Jenkins服務器上托管的CSS文件
- Jenkins服務器上托管的圖片文件
而如下形式的內容都會被禁止:
- JavaScript
- plugins (object/embed)
- HTML中的內聯樣式表(Inline style sheets),以及引用的外站CSS文件
- HTML中的內聯圖片(Inline image definitions),以及外站引用的圖片文件
- frames
- web fonts
- XHR/AJAX
- etc.
二. 解決方案
1. 臨時方案1:
官網中也寫明了解決方案,不過這個解決方案是臨時的,jenkins重啟后就失效了

翻譯成中文就是:進入Jenkins》Manage Jenkins》Script Console》輸入如下命令,點擊運行,重新構建項目后的報告就可以展示樣式了
System.setProperty("hudson.model.DirectoryBrowserSupport.CSP", "")

2. 臨時方案2
如果Jenkins為war包,也就是部署到tomcat上這種,可以通過java命令運行解決
關閉jenkins,命令行直接運行:java -Dhudson.model.DirectoryBrowserSupport.CSP= -jar D:\Jenkins\jenkins.war,路徑根據自己的jenkins.war路徑修改
不過這個方案也是臨時的,tomcat重啟后就不生效了
3. 永久解決方案1
修改catalina.bat文件,找到tomcat/bin下的catalina.bat文件,直接在文件中添加如下命令:
set CATALINA_OPTS="-Dhudson.model.DirectoryBrowserSupport.CSP=\"\""

添加完成后,需要重啟tomcat,這樣就可以永久有效了
4. 永久解決方案2
1)安裝插件startup-trigger-plugin和Groovy,安裝方式參考文檔:https://www.cnblogs.com/leslie12956/p/13186158.html
2)新建一個job,該job專門用於Jenkins啟動時執行的配置命令;每次jenkins啟動都會自動執行該job
3)在構建觸發器模塊下,勾選Build when job nodes start;

4)在增加構建步驟,增加Execute system Groovy script,輸入命令:System.setProperty("hudson.model.DirectoryBrowserSupport.CSP","")

注意: 我們的方法中,都是把安全策略設置為空,這樣其實是有安全隱患的,實際應用中,可以根據自己的項目需要進行設置,詳細的配置可參考:https://content-security-policy.com
