Jenkins持續集成——巧妙解決無法打開引用CSS、JS的HTML頁面問題

問題背景

在部署jenkins持續集成的過程中經常會用到HTML Publisher Plugin插件來顯示測試報告。

爲了測試報告樣式的美觀以及易讀,測試報告中經常會搭配CSS和JS實現自定義的樣式或動畫效果。

         Jenkins中在訪問有自定義樣式或動畫效果的測試報告時,展示的樣式往往會出乎你的想象,面目全非,樣式錯亂,動畫無法展示等等問題。打開瀏覽器開發工具控制檯,可以看到CSS、JS加載失敗。

        

原因分析

Jenkins爲了避免受到惡意HTML/JS文件的攻擊,會默認將安全策略CSP設置爲:

sandbox; default-src 'none'; img-src 'self'; style-src 'self';

在此配置下,只允許加載:

1、Jenkins服務器上託管的CSS文件

2、Jenkins服務器上託管的圖片文件

 

以下形式的內容都會被禁止:

1、   JavaScript

2、   plugins (object/embed)

3、   HTML中的內聯樣式表(Inlinestyle sheets),以及引用的外站CSS文件

4、   HTML中的內聯圖片(Inlineimage definitions),以及外站引用的圖片文件

5、   frames

6、   web fonts

7、   XHR/AJAX

 

解決辦法

方法一:修改CSP(ContentSecurity Policy)的默認配置,到Jenkins系統管理à腳本命令行,執行以下Groovy命令,然後點擊運行。配置完成後,重新構建原有項目,HTML頁面即可正常顯示。

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

然而當你重新啓動jenkins時,你會發現,HTML頁面再次面目全非,CSP恢復爲默認配置,因此這個辦法只是臨時方案。

 

方法二:利用jenkins的以下兩個插件可以巧妙解決這個問題

1、Startup Trigger: 可實現在Jenkins節點(master/slave)啓動時觸發構建;

2、Groovy plugin: 可實現直接執行Groovy代碼。

解決步驟如下:

1、Jenkins中新建一個Job,該Job專用於Jenkins啓動時執行的配置命令。

2、在“構建觸發器”模塊,選擇“Buildwhen job nodes start”選項。

3、在“構建”模塊,選擇“Executesystem Groovy script”,執行如下Groovy命令:

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

         立即構建此Job,返回原項目重新構建,再次訪問HTML頁面,你會驚喜的發現問題已經解決了!!有木有很開心。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章