本文从四个步骤来分享我们在自行搭建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内容安全策略

内容安全策略

欢迎访问我的简书主页。在简书,不仅仅是技术,我们一起读书成长,财务自由,心灵自由。

简书:https://www.jianshu.com/u/f9bd28315d53

解决Jenkins的html样式不生效问题的终极方案的更多相关文章

  1. uni-app解决小程序圆角样式不生效

    在使用uni-app实现小程序的时候,设置左图的右圆角不生效,样式也都没有问题,在模拟器上也可以正常现实,手机上样式出现差别,现有以下解决方法: 设置整个圆角,然后左边使用margin-left:-3 ...

  2. vue 组件中添加样式不生效

    如何产生 在开发项目中遇到在组件中添加样式不生效的情况.具体场景如下 //// vue 组件 <template> <div class="box" data-v ...

  3. less文件的样式无法生效的一个原因,通过WEB浏览器访问服务器less文件地址返回404错误

    有一种情况容易导致less文件的样式无法生效,就是部分服务器(以IIS居多)会对未知后缀的文件返回404,导致无法正常读取.less文件.解决方案是在服务器中为.less文件配置MIME值为text/ ...

  4. 【转载】win10解决设置默认打开方式不生效问题(双击每次都要选择默认打开程序)

    win10解决设置默认打开方式不生效问题(双击每次都要选择默认打开程序) 以下文章 部分选自 https://blog.csdn.net/shan165310175/article/details/8 ...

  5. 解决jenkins运行磁盘满的问题

    解决jenkins运行磁盘满的问题 - ling811的专栏 - CSDN博客 https://blog.csdn.net/ling811/article/details/74991899 1.自动丢 ...

  6. Jenkins 解决Jenkins下java无法运行slave-agent jnlp程序连接Windows Slave主机

    解决Jenkins下java无法运行slave-agent jnlp程序连接Windows Slave主机   by:授客 QQ:1033553122 测试环境 java下载地址:http://www ...

  7. 解决CSS3多列样式column-width布局时内容被截断、错乱

    一.问题 使用CSS3的column-width: auto | <length>属性时,出现排列的内容被截断,出现错位的现象. 二.原因 需要为图片容器设置高度,不然会崩掉. 三.解决方 ...

  8. CSS中margin: 0 auto;样式没有生效

    问题:有两个元素: A, B.两则是嵌套关系,A是B的父节点.A和B都是块元素.当在A上设置:margin: 0 auto的时候,B并没有在页面中居中. margin: 0 auto 为什么没有生效? ...

  9. vue中修改第三方组件的样式不生效

    问题 在使用element-ui时,有时候想要修改组件内的样式,但不成功,例如 <div class="test"> <el-button>按钮</e ...

随机推荐

  1. USACO07NOV Cow Relays G 题解

    题目 For their physical fitness program, \(N (2 ≤ N ≤ 1,000,000)\) cows have decided to run a relay ra ...

  2. Git篇---将秘钥添加到github

    第1步:创建SSH Key.在用户主目录下,看看有没有-/.ssh目录,如果有,再看看这个目录下有没有id_rsa和id_rsa.pub这两个文件,如果已经有了,可直接跳到下一步.如果没有,打开She ...

  3. Lambda 表达式遍历集合时用remove方法删除list集合中满足条件的元素问题

    一:循环遍历list集合的四种方式 简单for循环 iterator循环 增加for循环 Lanbda表达式 二:四种遍历方式的用法示例 //简单for循环 List<SalaryAdjustm ...

  4. Github 新玩法 -- Profile ReadMe

    Github 新玩法 -- Profile ReadMe Intro 今天刷 Github 的时候偶然发现一个新的玩法,Github Profile ReadMe,可以在个人的 Profile 页面展 ...

  5. JVM 专题十一:运行时数据区(六)方法区

    1. 栈.堆.方法区关系交互 运行时数据区结构图: 从线程共享与否的角度来看: 2. 方法区的理解 2.1 方法区在哪里? <Java虚拟机规范>中明确说明:“尽管所有的方法区在逻辑上属于 ...

  6. Python之介绍、基本语法、流程控制

    本节内容 Python介绍 发展史 Python 2 or 3? 安装 Hello World程序 变量 用户输入 模块初识 .pyc是个什么鬼? 数据类型初识 数据运算 表达式if ...else语 ...

  7. .NET Core微服务开发网关篇-ocelot

    通过上篇我们知道,网关是外部访问的统一入口,本文采用Ocelot作为Api网关. 环境要求: vs2019 .NetCore3.1 Ocelot16.0.1 创建一个产品服务Api站点(AAStore ...

  8. 搭建sonarqube分析golang代码

    准备postgres 为什么不使用Mysql呢,因为从7.9就不支持了 docker启动postgres docker run -d \ --name sonar-postgres \ -e POST ...

  9. vue邪道玩法 : 把vue实例存在别的地方,以及可能会遇到的问题

    一般来说,VUE项目中,this指向VUE实例. 但有的时候,某些代码会改变this的指向. 这时,可以用一个临时变量存储VUE实例. test1(){ var _this = this // 把vu ...

  10. iview实战 : 树形组件自定义

    Tree树形组件是 iview 中相对复杂的一个组件. 自定义节点内容 使用强大的 Render 函数可以自定义节点显示内容和交互,比如添加图标,按钮等. ——官方文档 但官方的 example 只有 ...