解决Jenkins插件无法引用外部HTML文件的问题

很多Jenkins插件允许我们直接引用外部HTML文件,这样方便我们直接在Jenkins的控制台显示更多信息。例如我可以使用插件“Publish rich text message”来显示我们的报表。但是出于安全考虑,自从Jenkins 1.625.3版本之后,Jenkins网页报文头添加了新header "Content-Security-Policy",默认情况下这会限制Jenkins执行第三方网页中的JS,因此,在我们使用插件“Publish rich text message”显示其它网页文件的时候就会出现显示异常的问题,如下,本文将介绍如何解决这类问题。

Blocked script execution in '

' because the document's frame is sandboxed and the 'allow-scripts' permission is not set.首先来看看Jenkins的默认安全设置:

看到没,几乎限制了所有不安全因素。下面再来看看默认情况下,Jenkins请求的头信息。

在我的Job里面引用了一个外部html文件,此时请求这个文件时的header是:

Content-Security-Policy: sandbox; default-src 'none'; img-src 'self'; style-src 'self';

知道了Jenkins的安全设置,下面看看在哪里可以设置这个信息。

本文以Windows服务版本的Jenkins为例。打开Jenkins安装目录,找到jenkins.xml,用记事本工具打开它,可以看到有一行arguments配置项,默认如下:

-Xrs -Xmx256m -Dhudson.lifecycle=hudson.lifecycle.WindowsServiceLifecycle -jar "%BASE%\jenkins.war" --httpPort=8080 --webroot="%BASE%\war"

这就是Jenkins的启动参数。

如果想完全禁用这个安全限制的话,只要简单粗暴的做如下设置:

-Xrs -Xmx256m -Dhudson.lifecycle=hudson.lifecycle.WindowsServiceLifecycle -Dhudson.model.DirectoryBrowserSupport.CSP="" -jar "%BASE%\jenkins.war" --httpPort=8080 --webroot="%BASE%\war"

其中-Dhudson.model.DirectoryBrowserSupport.CSP=""就是禁用安全限制。

如果想做更多设置可以参考下面代码:

-Dhudson.model.DirectoryBrowserSupport.CSP=\"sandbox allow-scripts; style-src 'unsafe-inline' *;script-src 'unsafe-inline' *;\"

设置完成之后,一定要记得重启Jenkins服务。

完成以上设置之后,再次打开Jenkins,引用的第三方网页已经能正常显示了。

此时header中已经没有了刚才的安全项。

发表评论
留言与评论(共有 0 条评论)
   
验证码:

相关文章

推荐文章

'); })();