Jenkins-HTML 发布插件-在 Jenkins 服务器中查看报告时不显示 CSS

我对 Jenkins HTML Publisher 插件有一个奇怪的问题,在这个插件中,我添加到报告中的所有花哨的 CSS 在 Jenkins 中查看时都被删除了。如果我把报告下载到本地,我就可以看到 CSS 格式。在 Jenkins 中有一个允许查看 CSS 的设置吗?

My HTML Publisher Settings in Jenkins:

enter image description here

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

enter image description here

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

enter image description here

143757 次浏览

解决了这个问题,在这里共享给其他用户。

CSS is stripped out because of the Content Security Policy in Jenkins. (https://wiki.jenkins-ci.org/display/JENKINS/Configuring+Content+Security+Policy)

默认规则设置为:

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

这套规则的结果如下:

  • 根本不允许使用 JavaScript
  • No plugins (object/embed) allowed
  • 不允许内联 CSS,或来自其他站点的 CSS
  • 没有其他人的影像 地点
  • 不允许帧
  • 不允许使用网页字体
  • 不允许 XHR/AJAX 等等。

为了放松这个规则,去

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

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

及按快门。如果您在“ Result”头部下面看到输出为“ Result:”,则禁用保护。重新运行您的构建,您可以看到存档的新 HTML 文件将启用 CSS。

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

一个永久性的修复是在 [Jenkins directory]\jenkins.xml中更改一行(对我来说是在 C:\Jenkins\jenkins.xml)

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

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

-Dhudson.model.DirectoryBrowserSupport.CSP=

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

您可以使用 瓦尔答案中指定的 groovy 命令来解决这个问题。

直到詹金斯重新开始,这种效果才会消失,之后你必须再来一次。

解决这个问题的一个解决方案是配置一个工作,它将在 Jenkins 启动时为您执行此操作。

您可以通过使用 启动触发器插件来实现这一点。

安装之后,创建一个新的作业,并且在 构建触发器部分下面有一个新的复选框,您必须选中它。

然后使用以下命令添加一个 Execute system Groovy 脚本构建步骤:

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

Save and everything should work.

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

Https://wiki.jenkins-ci.org/display/jenkins/startup+trigger -开始在 jenkins 创业公司工作

Https://wiki.jenkins-ci.org/display/jenkins/Groovy+plugin -运行 System Groovy 脚本

我做了一个工作,从 Jenkins 重启开始,设置参数。

set to start build after Jenkins is ran

并添加系统 Groovy 脚本来设置参数。 Run System Groovy script SetProperty (“ hudson.model. DirectoryBrowserSupport.CSP”,“ sandbox; img-src‘ self’;”)

森托斯中,启用 html 报表中的图像

  • sudo vi /etc/sysconfig/jenkins
  • set following in 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-src : < em > default-src 是加载诸如 JavaScript、 Images、 CSS、 Fonts、 AJAX 请求、 Frames、 HTML5 Media 等内容的默认策略

Img-src: < em > 定义有效的图像源。

Source Value

“ self”- < em > 允许从相同的源(相同的方案、主机和端口)加载资源。

用法: default-src 'self'

' unsafe-inline ' - Allows use of inline source elements such as style attribute, onclick, or script tag bodies (depends on the context of the source it is applied to) and javascript: URIs.

用法: default-src 'unsafe-inline'

“不安全-eval”-< em > 允许不安全的动态代码计算,如 JavaScript eval ()

用法: default-src 'unsafe-eval'

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

用法: img-src 'self' data:

Please refer more about content security policy 给你

现在回应已经太迟,但是想要分享。

我正在与部署在 Tomcat 上的 Jenkins 进行斗争,尝试执行脚本,它有所帮助,但是如果 Tomcat 被重启,它就会消失。

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

属性文件: tomcat _ install _ dir/conf/catalina.Properties 最后只需复制粘贴 catalina.properties 中的下面一行(您可以在任何地方设置它,只是为了不干扰现有的属性)

- Dhudson.model. DirectoryBrowserSupport.CSP = “”

把 HTTPS 添加到我的 Jenkins 之后,我也遇到了同样的问题。如果您遇到同样的问题,解决方案是简单地将您的 Jenkins URL 设置为使用 HTTPS 协议而不是 HTTP。它可以通过 jenkins 配置-> jenkins url 进行配置

进入“管理 Jenkins”-> “脚本控制台” 运行以下命令:

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

Go To

管理 Jenkins —— > 脚本控制台

然后输入以下命令:

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

然后按 Run。如果您得到的输出是“ Result”,那么重新运行构建检查 HTML 报告格式

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

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

Systemctl 重启 Jenkins

Https://wiki.jenkins.io/display/jenkins/post-initialization+script

若要永久设定系统属性(如使用 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

打开 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

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

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

森托斯上,以下的解决方案(这是在另一个答案的评论中提出的)是唯一一个对我有效的方案:

  1. Go to: Manage Jenkins > Manage Nodes and Clouds
  2. Click Gear icon on the right hand side for the node (by default there will be just one Node called Master)
  3. 单击左侧的“脚本控制台”
  4. 在控制台窗口中输入以下内容: System.setProperty("hudson.model.DirectoryBrowserSupport.CSP", "default-src 'self' 'unsafe-inline' 'unsafe-eval'; img-src 'self' 'unsafe-inline' data:;")
  5. 单击 Run
  6. 您应该会在 Result 部分看到一些输出,类似于下面的截图:

Script Console Result

我的特别问题是在 SerenityBDD 报告中缺少图像/css。在执行这些步骤之后,我的 Serenity 报告已经正确地呈现了所有的图像/css,包括执行了 prior的构建到此更改的报告。This solution will also work for any published html-based report.

对于这个问题我们有一个更简单的解决办法。除非你真的坚持使用 HTML 报告,否则你可以直接使用 Warnings NG 插件(无论如何这是个好主意) :

https://github.com/jenkinsci/warnings-ng-plugin/blob/master/SUPPORTED-FORMATS.md

我们使用它来处理 codeNarc (Groovy) ,也可以处理 Checkstyle、 PMD、 SpotBugs 和 Java 警告(Java)。

I know this is old, but this worked great for me, and it is what seems to be recommended in the Jenkins docs. I just set the resource root to a different url served from the same location.

”强烈建议设置资源根 URL,而不是自定义 Content-Security-Policy。下面的大多数文档是在内容安全策略最初被引入的时候编写的,并被管理员保留使用,因为管理员无法设置 Jenkins 来为来自不同域的用户内容提供服务。”

  1. 在 MacOS 中,Jenkins 运行一个服务,该服务需要在 $JENKINS _ HOME/init.groovy.d中创建一个 Groovy 脚本
  2. 呼叫 Start-properties. groovy并编码:
    import jenkins.model.Jenkins
import java.util.logging.LogManager
/* Jenkins home directory */
def jenkinsHome = Jenkins.instance.getRootDir().absolutePath
def logger = LogManager.getLogManager().getLogger("")
/* Replace the Key and value with the values you want to set.*/
/* System.setProperty(key, value) */
System.setProperty("hudson.model.DirectoryBrowserSupport.CSP", "")
logger.info("Jenkins Startup Script: Successfully updated the system properties value for hudson.model.DirectoryBrowserSupport.CSP . Script location : ${jenkinsHome}/init.groovy.d")
  1. Restart the Jenkins Service: 啤酒公司重启了 Jenkins-lts

重新构建作业并验证 HTML 报告到构建中

Https://i.stack.imgur.com/a60bn.png

enter image description here