解决Jenkins的html样式不生效问题的终极方案
本文从四个步骤来分享我们在自行搭建jenkins过程中遇到的报表样式不全(即html报告展示不正确)的问题:
1.问题现象
2.问题原因
3.问题原因补充
4.解决方法(可以直接跳到第四步解决问题)
一、问题现象
1.当你是使用Jenkins的Html Publisher插件来发布报表的时候,可能发现报表的CSS没有加载,如下图:
这张图是jmeter的一个性能报告的HMTL页面,通过HTML Publisher插件发布的,默认安装的jenkins无法展示其CSS效果。
2.这时候我们F12查看chrome的控制台。
这里我们看到控制台报错了,红框里面的那句英文的大概意思是,应用内联样式失败,因为违背了内容安全策略原则。
二、问题原因
什么是CSP?关于详情我们可以看文末的参考部分,我们从对应的官方文档得知:
Jenkins设置了默认规则集:
sandbox;default-src'none'; img-src'self'; style-src'self';
该规则集会导致如下行为:
根本不允许JavaScript
不允许插件(对象/嵌入)
不允许内联CSS或其他网站的CSS
没有允许来自其他网站的图片
不允许帧
不允许使用网络字体
不允许XHR / AJAX
...
三、问题补充
为什么要做这种限制呢,原因其实是防止一些内容安全问题。CSP(内容安全策略)最初是为了减少跨站点脚本的攻击面而设计的,所以此目的是为了网站的安全性问题。
那么我们为什么需要默认设置CSP呢,很多中大型公司的Jenkins一般都是由SCM、运维维护的一个全公司统一在用的这么一个工具,那么在下班回家可能公司的技术人员也会用到jenkins,这时候就会涉及到一些安全问题,比如我们jenkins是通过vpn访问,那么如果绕过vpn直接通过web相关的攻击去破坏jenkins,会不会导致一些数据泄露,又或者是数据丢失,服务器,网络瘫痪问题呢,一般中大型公司对于集团内部的jenkins都会做一些安全性的设置和测试,所以jenkins天然地默认了CSP相关的策略。
四、问题解决方法
既然原因说明白了,那如果想要在自己搭建的jenkins上展现完整的报表就比较简单了,无法是设置一些CSP的参数即可:
-Dhudson.model.DirectoryBrowserSupport.CSP="default-src 'self'; style-src 'self' 'unsafe-inline' www.google.com ajax.googleapis.com; script-src 'self' 'unsafe-inline' 'unsafe-eval' www.google.com; img-src 'self' data:; child-src 'self'"
以上参数需要加到Jenkins的启动命令里面:
启动jenkins一般有三种方式:
1. 直接java -jar jenkins.war
2. yum或者apt安装jenkins
3.docker启动jenkins
这里先讲前两种方式,docker修改jenkins涉及到docker的内容(回头会再分享)
1)如果是java 直接启动,则直接在启动参数中加入上述参数
java -jar -Dhudson.model.DirectoryBrowserSupport.CSP="default-src 'self'; style-src 'self' 'unsafe-inline' www.google.com ajax.googleapis.com; script-src 'self' 'unsafe-inline' 'unsafe-eval' www.google.com; img-src 'self' data:; child-src 'self'" jenkins.war
2)如果是apt install jenkins的安装(Ubuntu),则按照如下操作:
vi /etc/default/jenkins
#JAVA_ARGS修改成粗体部分
JAVA_ARGS="-Djava.awt.headless=true -Dorg.apache.commons.jelly.tags.fmt.timeZone=Asia/Shanghai -Dfile.encoding=UTF-8 -Dhudson.model.DirectoryBrowserSupport.CSP=\"default-src 'self'; style-src 'self' 'unsafe-inline' www.google.com ajax.googleapis.com; script-src 'self' 'unsafe-inline' 'unsafe-eval' www.google.com; img-src 'self' data:; child-src 'self'\""
#重启jenkins
service restart jenkins
3)如果是yum install jenkins的安装(centos),则按照如下操作:
vi /etc/sysconfig/jenkins
#JENKINS_JAVA_OPTIONS修改成粗体部分
JENKINS_JAVA_OPTIONS="-Djava.awt.headless=true -Dorg.apache.commons.jelly.tags.fmt.timeZone=Asia/Shanghai -Dfile.encoding=UTF-8 -Dhudson.model.DirectoryBrowserSupport.CSP=\"default-src 'self'; style-src 'self' 'unsafe-inline' www.google.com ajax.googleapis.com; script-src 'self' 'unsafe-inline' 'unsafe-eval' www.google.com; img-src 'self' data:; child-src 'self'\""
#重启jenkins
service restart jenkins
五、查看效果
如下图,css的样式完全加载,而且点击右侧菜单可以触发对应的页面切换:
以上就是本文解决Jenkins的html样式不全的整个过程,如果解决了你的问题,恳请您点个赞,后续会分享更多的解决方案的文章,加油~
参考:
欢迎访问我的简书主页。在简书,不仅仅是技术,我们一起读书成长,财务自由,心灵自由。
解决Jenkins的html样式不生效问题的终极方案的更多相关文章
- uni-app解决小程序圆角样式不生效
在使用uni-app实现小程序的时候,设置左图的右圆角不生效,样式也都没有问题,在模拟器上也可以正常现实,手机上样式出现差别,现有以下解决方法: 设置整个圆角,然后左边使用margin-left:-3 ...
- vue 组件中添加样式不生效
如何产生 在开发项目中遇到在组件中添加样式不生效的情况.具体场景如下 //// vue 组件 <template> <div class="box" data-v ...
- less文件的样式无法生效的一个原因,通过WEB浏览器访问服务器less文件地址返回404错误
有一种情况容易导致less文件的样式无法生效,就是部分服务器(以IIS居多)会对未知后缀的文件返回404,导致无法正常读取.less文件.解决方案是在服务器中为.less文件配置MIME值为text/ ...
- 【转载】win10解决设置默认打开方式不生效问题(双击每次都要选择默认打开程序)
win10解决设置默认打开方式不生效问题(双击每次都要选择默认打开程序) 以下文章 部分选自 https://blog.csdn.net/shan165310175/article/details/8 ...
- 解决jenkins运行磁盘满的问题
解决jenkins运行磁盘满的问题 - ling811的专栏 - CSDN博客 https://blog.csdn.net/ling811/article/details/74991899 1.自动丢 ...
- Jenkins 解决Jenkins下java无法运行slave-agent jnlp程序连接Windows Slave主机
解决Jenkins下java无法运行slave-agent jnlp程序连接Windows Slave主机 by:授客 QQ:1033553122 测试环境 java下载地址:http://www ...
- 解决CSS3多列样式column-width布局时内容被截断、错乱
一.问题 使用CSS3的column-width: auto | <length>属性时,出现排列的内容被截断,出现错位的现象. 二.原因 需要为图片容器设置高度,不然会崩掉. 三.解决方 ...
- CSS中margin: 0 auto;样式没有生效
问题:有两个元素: A, B.两则是嵌套关系,A是B的父节点.A和B都是块元素.当在A上设置:margin: 0 auto的时候,B并没有在页面中居中. margin: 0 auto 为什么没有生效? ...
- vue中修改第三方组件的样式不生效
问题 在使用element-ui时,有时候想要修改组件内的样式,但不成功,例如 <div class="test"> <el-button>按钮</e ...
随机推荐
- 6.22 集训--DP复习一
总结 下午的突击练习完全不在状态 A.拦截导弹简单版 题目描述 某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统.但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发 ...
- [Mybatis]Mybatis常用操作
Mybatis是目前国内比较流行的ORM框架,特点是可以写灵活的SQL语句,非常适合中小企业的面向数据库开发. 本文总结自己开发过程中常用的Mybatis操作. 一.插入操作 主键自增插入单条 < ...
- day73 bbs项目☞基本功能实现
目录 一.登录功能 二.首页搭建 三.admin后台管理 四.图片防盗链 五.个人站点展示 一.登录功能 views.py 0难度,都是基本操作,要熟悉auth模块的使用 # 登录功能 def log ...
- CTFHub_技能树_文件上传
文件上传 无限制 直接上传一句话后门,使用蚁剑连接: 获得flag: 前端验证 尝试直接上传后门,发现被拦截,经过判断为Javascript前端验证: 这里可以使用Firefox浏览器插件禁用页面js ...
- python 追踪函数调用
from flask import Flask import traceback app = Flask(__name__) @app.route('/') def hello_world(): tr ...
- AcWing 94. 递归实现排列型枚举
AcWing 94. 递归实现排列型枚举 题目链接 把 1~n 这 n 个整数排成一行后随机打乱顺序,输出所有可能的次序. 输入格式 一个整数n. 输出格式 按照从小到大的顺序输出所有方案,每行1个. ...
- Json对象,Json数组,Json字符串的区别
Json对象: var str = {"姓名":"张三","性别":"男","年龄":"2 ...
- Ant-Design-Vue中关于Table组件的使用
1. 如何自定义表格列头: <a-table :columns="columns" :dataSource="dataSource"> <sp ...
- J.U.C体系进阶(二):juc-locks 锁框架
Java - J.U.C体系进阶 作者:Kerwin 邮箱:806857264@qq.com 说到做到,就是我的忍道! juc-locks 锁框架 接口说明 Lock接口 类型 名称 void loc ...
- 软件测试大牛都是这样写测试用例的,你get到了嘛?
1. 用于语句覆盖的基路径法 基路径法保证设计出的测试用例,使程序的每一个可执行语句至少执行一次,即实现语句覆盖.基路径法是理论与应用脱节的典型,基本上没有应用价值,读者稍作了解即可,不必理解和掌握. ...