【问题标题】:Jenkins HTML Publisher Plugin: No external links with Jenkins 1.643Jenkins HTML Publisher Plugin:没有与 Jenkins 1.643 的外部链接
【发布时间】:2016-01-08 16:37:18
【问题描述】:

我有一份 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 无法启动 - 没有意识到我需要在整个过程中加上引号。

标签: jenkins jenkins-plugins


【解决方案1】:

您看到的问题可能与最近的security fixes 有关。有关如何放松 Jenkins 配置的详细信息,请参阅Configuring Content Security Policy wiki page

可以通过设置系统属性hudson.model.DirectoryBrowserSupport.CSP修改Jenkins发送的CSP头

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

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

您可以使用Jenkins Script Console 尝试不同的设置。

也如 wiki 页面所述,确保您已升级到 HTML Publisher 1.10(或更高版本)。

【讨论】:

  • 感谢您的信息!如果我发现任何东西,我会尝试在这里找到正确的设置和评论。
  • 我曾尝试使用脚本控制台临时更改安全设置,并且成功了。您必须像这样更改它以允许嵌入来自任何网站的图像: System.setProperty("hudson.model.DirectoryBrowserSupport.CSP", "sandbox; img-src *;") 您提到的网站还解释了如何启动 jenkins。通过控制台进行战争以使此设置永久有效。在我们的例子中,我们在 Ubuntu 上将 Jenkins 作为服务安装,我们不会从控制台手动启动它。目前我正在寻找一个配置文件或其他东西,我可以将这些更改永久地用于服务
  • 对于 Ubuntu,使用 /etc/default/jenkins,另见 wiki.jenkins-ci.org/display/JENKINS/…
  • 谢谢你,大卫!我编辑了打开的帖子并整合了您的答案。
  • @ReactiveMax 感谢您对我的信任,但您不应该edit your question to contain the answer。问题应该是问题,答案应该是答案。
【解决方案2】:

我知道最初的问题是针对 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 变量
【解决方案3】:

如果您使用的是 Red Hat,请更新 JENKINS_JAVA_OPTIONS

【讨论】:

    猜你喜欢
    • 2014-08-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-29
    相关资源
    最近更新 更多