Jenkins-HTML Publisher插件-在Jenkins Server中查看报告时不显示CSS


92

我对Jenkins HTML Publisher插件有一个奇怪的问题,其中在Jenkins中查看时,删除了我添加到报告中的所有精美CSS。如果我将报告下载到本地,则可以看到CSS格式。Jenkins中是否有一个允许查看CSS的设置?

我在Jenkins中的HTML发布者设置:

在此处输入图片说明

在詹金斯中显示我的报告页面:

在此处输入图片说明

当我的报告页面显示在本地时:

在此处输入图片说明



2
所有人都说您是通过禁用内容安全策略来“修复”它的,而没有想到为什么它首先存在。可以影响要构建的更改的任何人都可以劫持管理员凭据,并可以访问整个Jenkins集群。如果小心的话,内联css通常是安全的,但是允许脚本是灾难。
OrangeDog

Answers:


174

找出问题。在这里与其他用户共享。

由于詹金斯(Jenkins)中的内容安全策略,CSS被删除。(https://wiki.jenkins-ci.org/display/JENKINS/Configuring+Content+Security+Policy

默认规则设置为:

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

此规则集导致以下结果:

  • 完全禁止使用JavaScript
  • 不允许插件(对象/嵌入式)
  • 不允许内联CSS或其他网站的CSS
  • 不允许其他网站提供图片
  • 没有框架
  • 不允许使用网络字体
  • 不允许XHR / AJAX,等等。

要放松此规则,请转到

  1. 管理詹金斯->
  2. 管理节点->
  3. 单击设置(齿轮图标)->
  4. 单击左侧的脚本控制台,然后键入以下命令:

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

然后按运行。如果在“结果”标题下看到输出为“结果:”,则保护功能已禁用。重新运行您的构建,您可以看到存档的新HTML文件将启用CSS。


1
谢谢!!!它确实帮助我解决了詹金斯遇到的这个CSS问题。
Eyal Sooliman '16

1
@Steerpike我想知道您的意思,然后发现重新启动Jenkins时css被阻止了。因此,我创建了一个Jenkins作业,该作业每12小时运行一次命令。似乎可以解决问题。
Aeropher

@Aeropher谢谢-我是Jenkins的新手-如何设置该工作?使用“执行Windows批处理命令”的构建步骤设置常规作业?
Steerpike '17

3
@Steerpike没错,只是它是一个groovy命令,因此您需要在“执行系统Groovy脚本”构建步骤中执行它。然后在“构建触发器”部分下,选择具有以下值的“定期构建”:H 12 * * *
Aeropher'2

实际上,您甚至不需要重新运行构建。只需从詹金斯(Jenkins)重新加载生成的HTML,它便会更改策略。
hshib

22

CentOs中,启用html报告中的图像

  • sudo vi /etc/sysconfig/jenkins
  • 设置在 JENKINS_JAVA_OPTION

JENKINS_JAVA_OPTIONS="-Djava.awt.headless=true -Dhudson.model.DirectoryBrowserSupport.CSP=\"default-src 'self' 'unsafe-inline' 'unsafe-eval'; img-src 'self' 'unsafe-inline' data:;\""

即使重新启动jenkins的服务器,此操作也将起作用。


指示

default-srcdefault-src是用于加载内容的默认策略,例如JavaScript,图像,CSS,字体,AJAX请求,框架,HTML5媒体

img-src: 定义图像的有效来源。

来源价值

' self'-允许从相同的来源(相同的方案,主机和端口)加载资源。

用法: default-src 'self'

“不安全直插” -允许使用内联源元件,例如样式属性,的onclick或脚本标签机构(依赖于它被施加到源的上下文中)和javascript:的URI。

用法: default-src 'unsafe-inline'

“不安全-EVAL” -允许不安全动态代码评估例如JavaScript的eval()

用法: default-src 'unsafe-eval'

数据: -允许通过数据方案加载资源(例如Base64编码的图像)。

用法: img-src 'self' data:

在此处详细了解内容安全政策


1
您只应启用内联css,而不应启用所有其他不安全的功能
OrangeDog

如果在这样的数据部分的对象中使用某些svg <object type="image/svg+xml" data="imgs/lifecycle-diagram.svg"><span class="alt">lifecycleDiagram</span></object>(用于嵌入式plantuml图的交互式asciidoctor spring-rest文档的结果),则需要将object-src设置为self。通知转义:JENKINS_JAVA_OPTIONS='-Djava.awt.headless=true -Dhudson.security.HudsonPrivateSecurityRealm.ID_REGEX="^[a-zA-Z0-9_.-]+$" -Dhudson.model.DirectoryBrowserSupport.CSP="sandbox; default-src '\''none'\''; img-src '\''self'\''; style-src '\''self'\''; object-src '\''self'\'';"'
Lubo

1
大!可以与--env JAVA_OPTS =“ ...”一起用于docker
嗅到

1
对于我的ubuntu安装,我使用vi /etc/default/jenkins了变量JAVA_ARGS
mRyan

14

转到“管理Jenkins”->“脚本控制台”,然后运行以下命令:

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

3
在将第二个参数修改为kithinkmatthew提到的值之后,这对我System.setProperty("hudson.model.DirectoryBrowserSupport.CSP", "default-src 'self' 'unsafe-inline' 'unsafe-eval'; img-src 'self' 'unsafe-inline' data:;")
有用

@AndrewMackrodt您建议的是对我有用的唯一解决方案(我在CentOS上运行Jenkins)
lax1089

12

(以下解决方案适用于Windows。)

永久性的解决方法是更改​​其中的一行[Jenkins directory]\jenkins.xml(对我来说是C:\Jenkins\jenkins.xml

<executable>java.exe</executable>
<arguments>[arguments are here]</arguments>

将以下参数添加到以空格分隔的参数列表中:

-Dhudson.model.DirectoryBrowserSupport.CSP=

然后重新启动Jenkins服务以获取更改。


1
这是我唯一的工作答案,我也增加-Dfile.encoding=UTF-8了论点
Sasha Bond

9

您可以通过使用Vall的答案中指定的groovy命令来解决此问题。

效果一直保持到Jenkins重新启动,然后您必须再次执行。

解决此问题的一种解决方案是配置一个工作,每当詹金斯启动时,该工作就会为您完成。

您可以使用“启动触发器”插件来执行此操作。

安装完成后,创建一个新作业,您将在“生成触发器”部分下拥有一个新复选框,您必须对其进行检查。

然后使用以下命令添加“执行系统Groovy”脚本构建步骤:

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

保存,一切都会正常。


使用这种方法,您还需要安装Groovy插件(如果尚未安装)。否则,“执行系统Groovy”脚本构建步骤将不会在构建选项中显示。
巴林特巴氏

5

对于Ubuntu 14版本,有用的是特殊的插件:

https://wiki.jenkins-ci.org/display/JENKINS/Startup+Trigger-开始在詹金斯启动工作

https://wiki.jenkins-ci.org/display/JENKINS/Groovy+plugin-运行系统Groovy脚本

我做了一份工作,从詹金斯重新启动开始并设置了参数。

将在詹金斯(Jenkins)运行后开始构建

并添加了系统Groovy脚本来设置参数。 运行系统Groovy脚本 System.setProperty(“ hudson.model.DirectoryBrowserSupport.CSP”,“沙箱; img-src'self';”)


尽管运行该作业成功完成,但是它没有为我的报告启用CSS显示。我在“脚本控制台”中运行了完全相同的Groovy脚本,并且运行良好。我还可以做些什么?该作业的常规脚本不会更改实际父级Jenkin的属性。
frakman1

此时,@ frakman1我的Groovy脚本看起来像这样-System.setProperty(“ hudson.model.DirectoryBrowserSupport.CSP”,“”)但这就是所有,并且一切正常。也许您没有管理员用户?
abiab

感谢您的答复。我最终得到它的工作。我不得不改用以下脚本:System.setProperty("hudson.model.DirectoryBrowserSupport.CSP", "sandbox allow-same-origin allow-scripts; default-src 'self'; script-src * 'unsafe-eval'; img-src *; style-src * 'unsafe-inline'; font-src *")
frakman1

1

管理Jenkins->脚本控制台

并输入以下命令:

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

然后按运行。如果您将输出作为“结果”,则重新运行构建,检查HTML报告格式


1

要进行永久设置,请创建一个Groovy脚本文件$ JENKINS_HOME / init.groovy或目录$ JENKINS_HOME / init.groovy.d /中的任何.groovy文件,其内容如下:

System.setProperty("hudson.model.DirectoryBrowserSupport.CSP", "sandbox allow-scripts; default-src 'self'; img-src *; style-src 'self' 'unsafe-inline'; script-src * 'unsafe-inline';")

systemctl重新启动詹金斯

https://wiki.jenkins.io/display/JENKINS/初始化后的脚本


1

打开jenkins.xml文件并复制如下参数。它将永久修复。完成后,重新启动计算机。

<arguments>-Xrs -Xmx256m -Dhudson.lifecycle=hudson.lifecycle.WindowsServiceLifecycle -Dhudson.model.DirectoryBrowserSupport.CSP="sandbox allow-scripts; default-src 'self'; style-src 'self' 'unsafe-inline';" -jar "%BASE%\jenkins.war" --httpPort=8080 --webroot="%BASE%\war"</arguments

1

CentOS上,以下解决方案(在另一个答案的注释中建议)是唯一对我有用的解决方案:

  1. 转到:管理Jenkins>管理节点和云
  2. 单击该节点右侧的齿轮图标(默认情况下,只有一个称为主节点的节点)
  3. 点击左侧的“脚本控制台”
  4. 在控制台窗口中输入以下内容: System.setProperty("hudson.model.DirectoryBrowserSupport.CSP", "default-src 'self' 'unsafe-inline' 'unsafe-eval'; img-src 'self' 'unsafe-inline' data:;")
  5. 点击运行
  6. 您应该在“结果”部分中看到一些输出,类似于以下屏幕截图:

脚本控制台结果

我的特定问题是Serenity BDD报表中缺少图像/ css。执行完这些步骤后,我的Serenity报告正确渲染了所有图像/ css,包括此更改之前执行的构建报告。该解决方案也适用于任何已发布的基于html的报告。


0

现在做出回应已经为时已晚,但可以分享。

我在Tomcat上部署的詹金斯(Jenkins)上苦苦挣扎,尝试执行脚本,这样做很有帮助,但是如果重新启动tomcat,它就会消失。

通过在tomcat的catalina.properties中设置属性来进行永久修复。

属性文件:tomcat_installation_dir / conf / catalina.properties只需复制以下行,最后将其粘贴到catalina.properties中即可(您可以将其设置为任何位置,以免与现有属性混淆)

-Dhudson.model.DirectoryBrowserSupport.CSP =“”


0

将HTTPS添加到我的詹金斯后,我遇到了同样的问题。如果您遇到相同的问题,则解决方案很简单-将Jenkins网址设置为使用HTTPS协议而不是HTTP。可以通过jenkins配置-> jenkins url进行配置


0

要使用Jenkins-X永久设置系统属性myvalues.yaml,请在当前目录中创建文件,其内容如下:

jenkins:
  Master:
    JavaOpts: >
      -Dhudson.model.DirectoryBrowserSupport.CSP=

然后重新启动jenkins-x平台,可以通过升级它来完成:

$ jx upgrade platform --always-upgrade
# Presumably jx.exe is used if on Windows (not tested)

为了避免实际升级平台,只需强行将其升级到相同版本:

$ version=$(jx version --no-version-check\
            | grep 'jenkins x platform' | sed -e 's/^jenkins.\+ //')
$ jx upgrade platform --version ${version} --always-upgrade

0

对于那些使用asciidoctor-maven-plugin插件从asciidoc文件生成HTML文档并将其进一步发布到Jenkins的用户,请更新插件配置,添加linkcss属性:

<configuration>
    <attributes>
        <linkcss>true</linkcss>
    </attributes>
    <backend>html5</backend>
    <outputDirectory>${project.build.directory}/generated-resources</outputDirectory>
</configuration>

-2

Debian / Ubuntu上,在智能安装中

  • sudo vi /etc/default/jenkins
  • 添加-Dhudson.model.DirectoryBrowserSupport.CSP=JAVA_ARGS(例如JAVA_ARGS="-Dhudson.model.DirectoryBrowserSupport.CSP="
  • 重新启动詹金斯- service jenkins restart

这对我来说足够了,但有关参数的完整列表,请参见此答案

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.