将本地的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样式展现异常的问题了。