Jenkins HTML发布插件:在Jenkins 1.643中无法使用外部链接

10

我有一个 Jenkins 任务,在后构建步骤中生成一个 HTML 页面,其中包含一个图像链接(HTML img 标签)。该 HTML 页面由 HTMLPublisher 插件为每个任务发布。

这一直很好用。但是自从我将 Jenkins 更新到 v.1.643 以来,当我点击发布的 HTML 页面时,我只看到一个空白页面。

我尝试了很多方法,并发现了以下奇怪的行为: 自从更新以来,我无法将外部链接嵌入我发布的 HTML 页面中。 如果我从外部位置嵌入图像(img src="somelocation/xxx.jpg"),则该图像不会显示。

如果我使用 Firefox 检查 HTML 页面,我可以看到图像标记变灰,就像它是看不见的一样,但实际上它并非如此。

如果我嵌入一个指向外部位置的普通超链接,则可以在显示的页面中看到链接,但是当我点击它时,什么也不会发生。

就像 Jenkins 不允许在此上下文中使用外部链接。

请在此帮助我:)

谢谢!

编辑:

感谢 Dave Bacher,他给了我正确的提示。 查看此页面以查看 Jenkins 的新安全策略。

https://wiki.jenkins-ci.org/display/JENKINS/Configuring+Content+Security+Policy#ConfiguringContentSecurityPolicy-Implementation

您必须放宽规则,以便再次允许嵌入外部图像。

为了测试它,只需在脚本控制台中输入以下内容:

System.setProperty("hudson.model.DirectoryBrowserSupport.CSP", "sandbox; img-src *;")

这将允许嵌入来自任何外部网站的图像。

如果你在Ubuntu上运行Jenkins并且想要永久设置这个功能,只需编辑文件/etc/default/jenkins。在# arguments to pass to java下添加以下行:

JAVA_ARGS="-Dhudson.model.DirectoryBrowserSupport.CSP=\"sandbox; img-src *;\""

谢谢你提供的JAVA_ARGS代码行 - 我一直在尝试,但Tomcat无法启动 - 没有意识到我需要将整个内容用引号括起来。 - metaforge
3个回答

13
你所看到的问题可能与最近的安全修复有关。请参阅配置内容安全策略维基页面,了解如何放宽Jenkins配置的详细信息。

Jenkins发送的CSP标头可以通过设置系统属性进行修改:

如果其值为空字符串,例如java -Dhudson.model.DirectoryBrowserSupport.CSP= -jar jenkins.war,则根本不会发送标头。

(警告!)这可能非常不安全,仅应在审查整体安全设置后使用。

你可以使用Jenkins脚本控制台尝试不同的设置。
另外,正如维基页面所述,请确保已升级到HTML Publisher 1.10(或更高版本)。

谢谢提供的信息!我会尝试找到正确的设置并在这里评论,如果我找到了什么。 - ReactiveMax
我已经尝试使用Script Console暂时更改了安全设置,而且它很有效。您必须像这样更改才能允许从任何网站嵌入图像:System.setProperty("hudson.model.DirectoryBrowserSupport.CSP", "sandbox; img-src *;")您提到的网站还解释了如何通过控制台启动jenkins.war以使此设置永久生效。在我们的情况下,我们已经将Jenkins安装为Ubuntu服务,并且我们不会手动从控制台启动它。目前,我正在寻找一个配置文件或其他东西,可以在服务上永久地进行这些更改。 - ReactiveMax
对于Ubuntu系统,请使用 _/etc/default/jenkins_,详见https://wiki.jenkins-ci.org/display/JENKINS/Installing+Jenkins+on+Ubuntu。 - Dave Bacher
谢谢你,David!我编辑了这篇公开文章,并整合了你的回答。 - ReactiveMax
3
@ReactiveMax 感谢您给我信用,但您不应该编辑您的问题以包含答案。问题应该是问题,答案应该是答案。 - Dave Bacher
我在Tomcat的bin目录下的setenv.sh文件中设置了我的CATALINA_OPTS。 - metaforge

3
我知道最初的问题是关于Linux的,但这也将有助于Windows用户... 如果您已经将Jenkins安装为服务(从Jenkins.exe开始),则需要更改jenkins.xml中的参数以使该属性持久化。
如果您要使用不安全的空选项,请记得用引号将参数括起来。以下是我在jenkins.xml中的示例行:
<arguments>-Xrs -Xmx1048m -XX:MaxPermSize=512m -Dhudson.lifecycle=hudson.lifecycle.WindowsServiceLifecycle "-Dhudson.model.DirectoryBrowserSupport.CSP= " -jar "%BASE%\jenkins.war" --httpPort=8080</arguments>

Linux用户可以在/etc/default/jenkins或/etc/sysconfig/jenkins中找到相应的选项。将该参数添加到JAVA_ARGS变量中即可。 - Antwane

0
如果您正在使用Red Hat,则请更新JENKINS_JAVA_OPTIONS

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接