zoukankan      html  css  js  c++  java
  • 解决Jenkins 中无法展示 HTML 样式的问题

    问题

    将本地的jmeter脚本部署到Jenkins上时,可以运行成功也可以在本地生成正确的HTML。但在Jenkins中查看HTML report时内容显示不出来。

    because the document's frame is sandboxed and the 'allow-scripts' permission

    问题分析

    出现该现象的原因在于Jenkins中配置的CSP(Content Security Policy)。

    简单地说,这是Jenkins的一个安全策略,默认会设置为一个非常严格的权限集,以防止Jenkins用户在workspace、/userContent、archived artifacts中受到恶意HTML/JS文件的攻击。

    默认地,该权限集会设置为:

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

    在该配置下,只允许加载:

    • Jenkins服务器上托管的CSS文件
    • Jenkins服务器上托管的图片文件

    而如下形式的内容都会被禁止:

    • JavaScript
    • plugins (object/embed)
    • HTML中的内联样式表(Inline style sheets),以及引用的外站CSS文件
    • HTML中的内联图片(Inline image definitions),以及外站引用的图片文件
    • frames
    • web fonts
    • XHR/AJAX
    • etc.

    可以看出,这个限制非常严格,在此限制下也就不难理解为什么我们的HTML没法正常展示样式了。

    解决方案

    临时解决方案

    要解决该问题,方式也比较简单,就是修改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-plugin和Groovy插件后,我们就可以进行配置了。

    配置方式如下:

    • 新建一个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 master的JVM环境中,与前面提到的Jenkins Script Console功能相同。如需了解更多信息,可查看Groovy plugin的详细说明

    至此,我们就彻底解决HTML样式展示异常的问题了。

    引用

    https://zhuanlan.zhihu.com/p/28080975

  • 相关阅读:
    POJ 1703 Find them, Catch them
    POJ 2236 Wireless Network
    POJ 2010 Moo University
    POJ 2184 Cow Exhibition
    POJ 3280 Cheapest Palindrome
    POJ 3009 Curling 2.0
    POJ 3669 Meteor Shower
    POJ 2718 Smallest Difference
    POJ 3187 Backward Digit Sums
    POJ 3050 Hopscotch
  • 原文地址:https://www.cnblogs.com/sker/p/9253740.html
Copyright © 2011-2022 走看看