jenkins使用HTML Publisher Plugin插件 拉取報告樣式缺失問題解決


---------------------------------------------------------臨時解決方案----親測ok

要解決該問題,方式也比較簡單,就是修改Content Security Policy的默認配置。

修改方式為,進入Manage Jenkins-> Script console,輸入如下命令並進行執行。

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

當看到如下結果后,則說明配置修改已經生效。

Result
Result:

再次進行構建,新生成的HTML就可以正常展示樣式了。需要說明的是,該操作對之前構建生成的HTML報告無效。

圖例:

------------------------------------------------------------------------------------------------------------------------------長期解決方案:

不過,該方法還存在一個問題:該配置只是臨時生效,當重啟Jenkins后,Content Security Policy又會恢復為默認值,從而HTML樣式又沒法展示了。

 

永久解決方案

當前,Jenkins官方還沒有相應的解決方法,我們只能在每次啟動或重啟Jenkins時,重新修改該安全策略。

如果手工地來重復這項工作,也是可行,但並不是一個好的解決方案。

回到剛才的Script console,會發現我們執行的命令其實就是一段Groovy代碼;那么,如果我們可以實現在Jenkins每次啟動時自動地執行該Groovy代碼,那么也就同樣能解決我們的問題了。

好在Jenkins已經有相應的插件:

搜索安裝startup-trigger-pluginGroovy插件后,我們就可以進行配置了。

配置方式如下:

  • 新建一個job,該job專門用於Jenkins啟動時執行的配置命令;
  • Build Triggers模塊下,勾選Build when job nodes start
  • Build模塊下,Add build step-> Execute system Groovy script,在Groovy Script中輸入配置命令,System.setProperty("hudson.model.DirectoryBrowserSupport.CSP", "")

需要注意的是,添加構建步驟的時候,應該選擇Execute system Groovy script,而不是Execute Groovy script關於這兩者之間的差異,簡單地說,Groovy Script相當於是運行在master/slave系統JVM環境中,而system groovy script,則是運行在Jenkins masterJVM環境中,與前面提到的Jenkins Script Console功能相同。如需了解更多信息,可查看Groovy plugin的詳細說明

至此,我們就徹底解決HTML樣式展示異常的問題了。

但還有一點需要格外注意,在本文的演示中,我們修改CSPContent Security Policy)配置時關閉了的所有安全保護策略,即將hudson.model.DirectoryBrowserSupport.CSP設置為空,其實這是存在很大的安全隱患的。

正確的做法,我們應該是結合項目的實際情況,選擇對應的安全策略。例如,如果我們需要開啟腳本文件加載,但是只限於Jenkins服務器上托管的CSS文件,那么就可以采用如下配置。

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

除此之外,CSP可以實現非常精細的權限配置,詳細配置可參考Content Security Policy Reference

 

 文章來源: https://testerhome.com/topics/9476

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM