將本地的jmeter腳本部署到Jenkins上時,能夠運行成功也能夠在本地生成正確的HTML。但在Jenkins中查看HTML report時內容顯示不出來。node
because the document's frame is sandboxed and the 'allow-scripts' permissionweb
出現該現象的緣由在於Jenkins中配置的CSP(Content Security Policy)。安全
簡單地說,這是Jenkins的一個安全策略,默認會設置爲一個很是嚴格的權限集,以防止Jenkins用戶在workspace、/userContent、archived artifacts中受到惡意HTML/JS文件的攻擊。服務器
默認地,該權限集會設置爲:ui
sandbox; default-src 'none'; img-src 'self'; style-src 'self';
在該配置下,只容許加載:spa
而以下形式的內容都會被禁止:插件
能夠看出,這個限制很是嚴格,在此限制下也就不難理解爲何咱們的HTML無法正常展現樣式了。code
要解決該問題,方式也比較簡單,就是修改Content Security Policy的默認配置。圖片
修改方式爲,進入Manage Jenkins->Script console,輸入以下命令並進行執行。ip
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-plugin和Groovy插件後,咱們就能夠進行配置了。
配置方式以下:
須要注意的是,添加構建步驟的時候,應該選擇Execute system Groovy script,而不是Execute Groovy script。關於這二者之間的差別,簡單地說,Groovy Script至關因而運行在master/slave系統JVM環境中,而system groovy script,則是運行在Jenkins master的JVM環境中,與前面提到的Jenkins Script Console功能相同。如需瞭解更多信息,可查看Groovy plugin的詳細說明。
至此,咱們就完全解決HTML樣式展現異常的問題了。