找到了问题所在,这里分享给其他用户。
Jenkins 中的内容安全策略会导致 CSS 被剥离掉。(https://wiki.jenkins-ci.org/display/JENKINS/Configuring+Content+Security+Policy)
默认规则设置为:
sandbox; default-src 'none'; img-src 'self'; style-src 'self';
这个规则集会导致以下结果:
要放宽这个规则,请前往
在左侧点击脚本控制台,然后输入以下命令:
System.setProperty("hudson.model.DirectoryBrowserSupport.CSP", "")
并按运行。如果您在“Result”标题下看到输出,则表示保护已禁用。重新运行构建,您将看到新的HTML文件启用了CSS。
sudo vi /etc/sysconfig/jenkins
命令打开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-src:default-src是加载JavaScript、图片、CSS、字体、AJAX请求、帧、HTML5媒体等内容的默认策略
img-src: 定义了图像的有效来源。
来源值
' self ' - 允许从同一源(相同的方案、主机和端口)加载资源。
用法:
default-src 'self'
' unsafe-inline ' - 允许使用内联源元素,例如样式属性、onclick或脚本标签主体(取决于应用于其上下文的源)和javascript: URI。
用法:
default-src 'unsafe-inline'
' unsafe-eval ' - 允许不安全的动态代码评估,例如JavaScript eval()
用法:
default-src 'unsafe-eval'
data: - 允许通过数据方案(例如Base64编码的图像)加载资源
用法:
img-src 'self' data:
有关内容安全策略的更多信息,请在此处查看。
<object type="image/svg+xml" data="imgs/lifecycle-diagram.svg"><span class="alt">lifecycleDiagram</span></object>
(交互式asciidoctor spring-rest文档嵌入plantuml图的结果),则需要将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'\'';"'
- Lubovi /etc/default/jenkins
命令打开文件,编辑变量 JAVA_ARGS
来安装我的 Ubuntu 系统上的 Jenkins。 - mRyan前往“管理Jenkins” -> “脚本控制台”,并运行以下命令:
System.setProperty("hudson.model.DirectoryBrowserSupport.CSP", "")
System.setProperty("hudson.model.DirectoryBrowserSupport.CSP", "default-src 'self' 'unsafe-inline' 'unsafe-eval'; img-src 'self' 'unsafe-inline' data:;")
。 - Andrew MackrodtSystem.setProperty("hudson.model.DirectoryBrowserSupport.CSP", "default-src 'self' 'unsafe-inline' 'unsafe-eval'; img-src 'self' 'unsafe-inline' data:;")
您可以按照 Vall 的回答中指定的 groovy 命令进行修复。
该效果会一直存在,直到 Jenkins 重新启动之后,您需要再次执行此操作。
解决此问题的一个方法是配置一个作业,每当 Jenkins 启动时,它将为您执行此操作。
您可以使用 Startup Trigger 插件 来实现此操作。
安装插件后创建一个新作业,您将在构建触发器部分下看到一个新的复选框,您需要选中它。
然后添加一个“Execute system Groovy script”构建步骤,并使用以下命令:
System.setProperty("hudson.model.DirectoryBrowserSupport.CSP","")
保存后,一切都应该正常工作。
以下方案适用于Windows操作系统。
永久性解决方法是更改位于[Jenkins目录]\jenkins.xml
中的一行代码(对我来说,它位于C:\Jenkins\jenkins.xml
)。
<executable>java.exe</executable>
<arguments>[arguments are here]</arguments>
将以下参数添加到以空格分隔的参数列表中:-Dhudson.model.DirectoryBrowserSupport.CSP=
然后重新启动Jenkins服务以使更改生效。
-Dfile.encoding=UTF-8
。 - Sasha Bond对于Ubuntu 14版本,有一些特殊的插件可以提供帮助:
https://wiki.jenkins-ci.org/display/JENKINS/Startup+Trigger - 在Jenkins启动时启动作业
https://wiki.jenkins-ci.org/display/JENKINS/Groovy+plugin - 运行系统Groovy脚本
我创建了一个作业,在Jenkins重新启动时启动并设置参数。
然后添加了系统Groovy脚本来设置参数。
System.setProperty("hudson.model.DirectoryBrowserSupport.CSP", "sandbox; img-src 'self';")
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 *")
- Frak前往:
管理 Jenkins --> 脚本控制台
然后输入以下命令:
System.setProperty("hudson.model.DirectoryBrowserSupport.CSP", "")
要进行永久设置,请创建一个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';")
系统控制台重新启动Jenkins。
https://www.jenkins.io/doc/book/security/configuring-content-security-policy/
https://content-security-policy.com/
以下是在我的托管Jenkins实例上启用美观的HTML覆盖率报告的步骤。Jenkins文档指出设置资源URL是比较优选的解决方案,但在我的情况下这是不可能的:System.setProperty("hudson.model.DirectoryBrowserSupport.CSP", "default-src 'none'; script-src 'self'; connect-src 'self'; img-src 'self'; style-src 'self';base-uri 'self';form-action 'self' ")
并点击“运行”。System.clearProperty("hudson.model.DirectoryBrowserSupport.CSP")
。对于在受访问保护的Jenkins实例中生成HTML覆盖率报告的情况,我发现这是可接受且有效的。该策略允许来自同一源的图像、脚本、AJAX、表单操作和CSS,不允许加载其他任何资源(如对象、框架、媒体等)。对于许多站点来说,这是一个很好的起点。