解决jenkins拉取报告没有样式的问题(还没试过)
来源: https://testerhome.com/topics/9476
对于测试报告来说,除了内容的简洁精炼,样式的美观也很重要。常用的做法是,采用HTML
格式的文档,并搭配CSS
和JS
,实现自定义的样式和动画效果(例如展开、折叠等)。
在Jenkins
中要展示HTML
文档,通常采用的方式有两种:
- 使用
HTML Publisher Plugin
; - 使用
Files to archive
功能,在Build Artifacts
中显示HTML
文档链接。
第一种方式配合插件,可以通过图形化操作实现简易配置,并且展示效果也不错;而第二种方式的优势在于使用Jenkins
自带的功能,不依赖插件也能实现基本的需求。
然而,不管是采用哪种方式,都有可能会遇到一种情况,就是展示出来的HTML
报告样式全无。在浏览器的Network
中查看资源加载情况,会发现相关的CSS
和JS
都没法正常加载。
Refused to load the stylesheet 'https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css' because it violates the following Content Security Policy directive: "style-src 'self'".
Refused to apply inline style because it violates the following Content Security Policy directive: "style-src 'self'". Either the 'unsafe-inline' keyword, a hash ('sha256-0EZqoz+oBhx7gF4nvY2bSqoGyy4zLjNF+SDQXGp/ZrY='), or a nonce ('nonce-...') is required to enable inline execution.
Blocked script execution in 'http://10.13.0.146:8888/job/SkyPixel-SmokeTest/34/artifact/reports/SkyPixel-smoketest/34.html' because the document's frame is sandboxed and the 'allow-scripts' permission is not set.
Refused to load the stylesheet 'https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css' because it violates the following Content Security Policy directive: "style-src 'self'".
问题分析
出现该现象的原因在于Jenkins
中配置的CSP
(Content Security Policy
)。
简单地说,这是Jenkins
的一个安全策略,默认会设置为一个非常严格的权限集,以防止Jenkins用户在workspace
、/userContent
、archived artifacts
中受到恶意HTML/JS
文件的攻击。
默认地,该权限集会设置为:
sandbox; default-src 'none'; img-src 'self'; style-src 'self';
在该配置下,只允许加载:
- Jenkins服务器上托管的
CSS
文件 - Jenkins服务器上托管的图片文件
而如下形式的内容都会被禁止:
- JavaScript
- plugins (object/embed)
- HTML中的内联样式表(
Inline style sheets
),以及引用的外站CSS文件 - HTML中的内联图片(
Inline image definitions
),以及外站引用的图片文件 - frames
- web fonts
- XHR/AJAX
- etc.
可以看出,这个限制非常严格,在此限制下也就不难理解为什么我们的HTML
没法正常展示样式了。
解决方案
临时解决方案
要解决该问题,方式也比较简单,就是修改Content Security Policy
的默认配置。
修改方式为,进入Manage Jenkins
->Script console
,输入如下命令并进行执行。
System.setProperty("hudson.model.DirectoryBrowserSupport.CSP", "")
当看到如下结果后,则说明配置修改已经生效。
Result
Result:
再次进行构建,新生成的HTML
就可以正常展示样式了。需要说明的是,该操作对之前构建生成的HTML
报告无效。
永久解决方案
不过,该方法还存在一个问题:该配置只是临时生效,当重启Jenkins
后,Content Security Policy
又会恢复为默认值,从而HTML
样式又没法展示了。
当前,Jenkins
官方还没有相应的解决方法,我们只能在每次启动或重启Jenkins
时,重新修改该安全策略。
如果手工地来重复这项工作,也是可行,但并不是一个好的解决方案。
回到刚才的Script console
,会发现我们执行的命令其实就是一段Groovy
代码;那么,如果我们可以实现在Jenkins
每次启动时自动地执行该Groovy
代码,那么也就同样能解决我们的问题了。
好在Jenkins
已经有相应的插件:
Startup Trigger
: 可实现在Jenkins
节点(master/slave)启动时触发构建;Groovy plugin
: 可实现直接执行Groovy
代码。
搜索安装startup-trigger-plugin
和Groovy
插件后,我们就可以进行配置了。
配置方式如下:
- 新建一个job,该job专门用于
Jenkins
启动时执行的配置命令; - 在
Build Triggers
模块下,勾选Build when job nodes start
; - 在
Build
模块下,Add build step
->Execute system Groovy script
,在Groovy Script
中输入配置命令,System.setProperty("hudson.model.DirectoryBrowserSupport.CSP", "")
。
需要注意的是,添加构建步骤的时候,应该选择Execute system Groovy script
,而不是Execute Groovy script
。关于这两者之间的差异,简单地说,Groovy Script
相当于是运行在master/slave
系统JVM
环境中,而system groovy script
,则是运行在Jenkins master
的JVM
环境中,与前面提到的Jenkins Script Console
功能相同。如需了解更多信息,可查看Groovy plugin
的详细说明。
至此,我们就彻底解决HTML
样式展示异常的问题了。
但还有一点需要格外注意,在本文的演示中,我们修改CSP
(Content Security Policy
)配置时关闭了的所有安全保护策略,即将hudson.model.DirectoryBrowserSupport.CSP
设置为空,其实这是存在很大的安全隐患的。
正确的做法,我们应该是结合项目的实际情况,选择对应的安全策略。例如,如果我们需要开启脚本文件加载,但是只限于Jenkins服务器上托管的CSS
文件,那么就可以采用如下配置。
System.setProperty("hudson.model.DirectoryBrowserSupport.CSP", "sandbox; style-src 'self';")
除此之外,CSP
可以实现非常精细的权限配置,详细配置可参考Content Security Policy Reference
。
解决jenkins拉取报告没有样式的问题(还没试过)的更多相关文章
- Jenkins拉取Git远程仓库中指定目录至本地指定目录
Jenkins拉取源码是非常实用的操作,比如每天在跑自动化测试前,拉取Git远程仓库中最新的脚本至本地.那么,Jenkins如何拉取Git远程仓库中指定目录至本地指定目录呢?下面来看看具体的设置方法. ...
- Jenkins拉取github库代码执行构建
前言 上篇文章写了关于定时构建,以及构建后发送邮件的内容,但是构建时运行的代码是我们手动添加到Jenkins工作空间的.这篇文章我们说一说自动从GitHub远程库拉取代码,执行构建,废话不多说,开始! ...
- 【Copy攻城狮日志】docker搭建jenkins拉取svn代码打包vue项目部署到nginx
↑开局一张图,故事全靠编↑ 前言 打开搜索引擎输入『Copy攻城狮』,发现最新的一条记录已经是去年的4月,意味着我又有一年时间没有再总结成长了.习惯了“温水煮青蛙”的日子,无论是经验水平还是薪资收入, ...
- git——解决每次拉取、提交代码时都需要输入用户名和密码
在开发中我们经常需要通过 git 对代码进行拉取和提交,频繁地输入用户名和密码会带来很大的麻烦,下面就介绍一下解决git每次拉取.提交代码时都需要输入用户名和密码的方法. 很简单,只要两步骤就能实现: ...
- 解决webstorm拉取Vue项目时卡顿,及内存爆满问题
最近在拉取Vue项目时总是会出现webstorm内存瞬间爆满,导致webstorm卡死,而且,有时在下载完node_modues后webstorm一直处于updating中,为此在网上找了很多方法结果 ...
- jenkins使用HTML Publisher Plugin插件 拉取报告样式缺失问题解决
---------------------------------------------------------临时解决方案----亲测ok 要解决该问题,方式也比较简单,就是修改Content S ...
- 解决Jenkins 中无法展示 HTML 样式的问题
问题 将本地的jmeter脚本部署到Jenkins上时,可以运行成功也可以在本地生成正确的HTML.但在Jenkins中查看HTML report时内容显示不出来. because the docum ...
- 持续集成 解决 Jenkins 中无法展示 HTML 样式的问题
对于测试报告来说,除了内容的简洁精炼,样式的美观也很重要.常用的做法是,采用HTML格式的文档,并搭配CSS和JS,实现自定义的样式和动画效果(例如展开.折叠等). 在Jenkins中要展示HTML文 ...
- [日常] 解决docker拉取镜像速度慢的问题
将docker修改为国内镜像源 在/etc/docker/daemon.json文件中添加下面参数 此处使用的是中国科技大学的docker镜像源 { "registry-mirrors ...
随机推荐
- 你知道uwsgi???
第一步,打开https://www.google.com.hk 第二步,输入how to restart uwsgi
- ASCII_01
1.来自“http://baike.baidu.com/link?url=WgFPtGe-rT6x6X0r_OiHGVZAV87Fu4_P5fvr7FsGyrm8QqTGuvVUfg4Jx7Rn-Le ...
- css字体介绍
内容一切来自百度百科 1.Helvetica Helvetica是一种被广泛使用的的西文字体,于1957年由瑞士字体设计师爱德华德·霍夫曼(Eduard Hoffmann)和马克斯·米耶丁格(Max ...
- "Entity Framework数据插入性能追踪"读后总结
园友莱布尼茨写了一篇<Entity Framework数据插入性能追踪>的文章,我感觉不错,至少他提出了问题,写了出来,引起了大家的讨论,这就是一个氛围.读完文章+评论,于是我自己也写了个 ...
- ng2 学习笔记(三)依赖注入与服务
前两篇文章简单介绍了ng2的一些基础用法,基本和ng1的使用风格差不多,只是写法和开发方式变化比较大. 这一篇,来总结一下ng的依赖注入与服务.官方的教程上是把他分开来讲的,个人感觉放在一起比较容易理 ...
- 智课雅思词汇---二十五、-ate
智课雅思词汇---二十五.-ate 一.总结 一句话总结:又是动词,又是名词,又是形容词 后缀:-ate ①[动词后缀] 表示做.造成.使之成....做...事等意义 hyphenate 加连字符 o ...
- IT技术栈、JAVA技术栈、游戏开发技术栈
一.形成IT思想,把各种技术融会贯通,使用时按需对技术选型. 二.对于每个知识点,框架的掌握依次分为三层. 1.会使用 2.熟悉原理 3.了解源码 三.思维导图
- phpexcel: 数据导出
// 设置列名最多40个 $cols = array( "A", "B", "C", "D", "E" ...
- hash路由(哈希路由)
1.https://www.cnblogs.com/huanying2015/p/8047376.html (js 哈希路由原理实现) 2.https://www.cnblogs.com/yeer/a ...
- js中去除两端逗号
1.js replace(a,b)之替换字符串中所有指定字符的方法 var str = 'abcadeacf'; var str1 = str.replace('a', 'o'); alert(str ...