掌握这几个技巧,才敢称为Jenkins大神!
01、Performance插件兼容性问题
自由风格项目中,有使用 Performance 插件收集构建产物,但是截至到目前最新版本(Jenkins v2.298,Performance:v3.19),此插件和Jenkins都存在有兼容性问题,会导致项目配置页面table,div错位,而导致无法保存配置,这个问题已经存在了好长时间了(至少半年),插件作者一直没有修复,目前在项目中要想使用这个插件,有以下三种解决办法:
将自由风格项目切换为流水线风格
服务器上手动修改项目的config.xml文件以达到保存配置的效果
Jenkins版本降级,经过测试,此插件在v2.263.4 LTS上可以正常使用,降级前做好备份工作,以及考虑其他插件的兼容性问题
02、修改Jenkins 安全策略(CSP)
场景:
借助 Robot Framework Plugin,可将Robot Framework项目更好的集成到Jenkins中,但是直接在Jenkins 项目中点击预览测试报告,会出现 Opening Robot Framework log failed 的错误,这是由于Jenkins为了避免受到恶意HTML/JS文件的攻击,会默认将安全策略CSP设置为:
sandbox; default-src 'none'; img-src 'self'; style-src 'self';
在此配置下,只允许加载Jenkins服务器上托管的CSS文件和图片文件。解决办法需要借助 Startup Trigger 和 Groovy plugin 两个插件,具体步骤如下:
Jenkins中新建一个Job,该Job专用Jenkins启动时执行的配置命令;
在“构建触发器”模块,选择“Build when job nodes start”选项,Restricted node Label保持空白,Quiet period设置为0;
在“构建”模块,选择“Execute system Groovy ”,执行如下Groovy命令:
System.setProperty("hudson.model.DirectoryBrowserSupport.CSP", "")
重启Jenkins服务器进行测试,会发现等待所有节点连接成功后此项目会立即自动触发构建。再去触发Robot项目构建,等待完成后点击访问测试报告页面,会发现已经可以正常访问了;
03、自定义Jenkins相对访问路径
场景:
nginx 为Jenkins做目录代理,同时站点下还代理了很多其他的应用,这里需要自定义Jenkins相对访问路径。
本机访问Jenkins的路径为:http://localhost:29908,需要改为:http://localhost:29908/jenkins
方法如下:
在Jenkins安装根目录下找到 jenkins.xml文件
找到service节点下的 arguements 子节点,并在最后面添加--prefix参数:
--prefix="/jenkins",其中 /jenkins 是自定义的访问路径
重启Jenkins服务,此时本机已经可以通过http://localhost:29908/jenkins进行访问
测试目录代理访问
注意:如果在目录代理之前,子节点和主节点之间就已经通过JNLP的方式连接好了,则需要找到子节点根目录下的 jenkins-slave.xml 文件,将service.arguements节点-jnlpUrl 参数值修改为正确的值。
04、git clone失败 : Killed by signal 15
场景:
jenkins项目clone代码时,出现任务被kill掉的情况,导致出现以下错误信息:

通过查看控制台的输出日志,可以看出原因是因为超时了。如果在限制时间内代码都没有clone完成,那么就任务就会被强制杀死:

解决方法:
当所需要clone的版本库过大或服务器网速较差时,clone的时间会超过默认的10分钟。因此需要修改 clone 的超时时间。
设置方法如下:

Jenkins:Build step 'Execute Windows batch command' marked build as failure

场景:
使用Jenkins定时跑接口测试用例,明明所有的用例都执行成功了,但是还是会触发执行失败时的邮件通知,查看Jenkins控制台日志,发现是由于上面截图的原因导致的。
解决方法:
在bat脚本(shell同样适用)最后一行加上exit 0,表示正常运行程序并退出程序。
Jenkins运行在Tomcat容器中,替换jar包的方法
背景:jenkins.war中引用的 commons-fileupload-1.3.1-jenkins-2.jar 被扫出来有安全隐患,需要替换到最新的1.4版本,因为扫描的时候是根据版本来的,如果直接采用覆盖并重命名的方法,还是会被扫出来,目前采取的方法是创建软连接。
先下载最新的commons-fileupload-1.4.jar
创建软链接(管理员权限),Linux系统下同理。
mklink webapps\jenkins\WEB-INF\lib\commons-fileupload-1.3.1-jenkins-2.jar webapps\jenkins\WEB-INF\lib\commons-fileupload-1.4.jar
把旧的commons-fileupload-1.3.1-jenkins-2.jar删除
重启tomcat
05、Windows节点机无法运行jnlp文件
在节点机双击jnlp文件没有反应时,可以尝试用命令行方式运行此文件,cmd进入jnlp文件目录下,运行 javaws slave-agent.jnlp,可以查看具体的错误提示,如下:
上图中这种情况,只需要修改下java安全配置即可解决,其他情况再具体分析。
06、关闭CSRF防护
Jenkins v2.204.6之前的版本,要想关闭CSRF防护,只需要在全局安全配置中禁用相关配置即可,但是较高版本的 Jenkins 默认均开启CSRF防护且删除了禁用的入口。要想禁用CSRF防护,只能通过配置参数的方式。
Jenkins若是跑在Tomcat下,只需在tomcat启动脚本中加入配置如下:
-Dhudson.security.csrf.GlobalCrumbIssuerConfiguration.DISABLE_CSRF_PROTECTION=true
若是以jar包形式部署的,只需在启动时加上配置参数即可。
07、修改 JVM 的内存配置
无论是以 Jdk Jar 方式运行Jenkins,还是将 War 包放在 Tomcat等容器下运行,都会存在一个问题:默认 JVM 内存分配太少,这导致启动或者运行一段时间后内存溢出报错java.lang.OutOfMemoryError: PermGen spac
所以,需要在启动前修改配置文件中的JVM 内存配置
set JAVA_OPTS=-server-Xms5000M
-Xmx5000M -Xss512k-XX:+AggressiveOpts
-XX:+UseBiasedLocking-XX:PermSize=256M
-XX:MaxPermSize=512M
-XX:+DisableExplicitGC-XX:MaxTenuringThreshold=31 -XX:+UseConcMarkSweepGC-XX:+UseParNewGC -XX:+CMSParallelRemarkEnabled -XX:+UseCMSCompactAtFullCollection -XX:LargePageSizeInBytes=128m -XX:+UseFastAccessorMethods -XX:+UseCMSInitiatingOccupancyOnly -Djava.awt.headless=true
这里的几个 JVM 参数含义如下:
-Xms: 使用的最小堆内存大小
-Xmx: 使用的最大堆内存大小
-XX:PermSize: 内存的永久保存区域大小
-XX:MaxPermSize: 最大内存的永久保存区域大小这几个参数也不是配置越大越好,具体要根据所在机器实际内存和使用大小配置。
08、配置优化减少磁盘空间占用
Job 构建历史较多时,如果没有配置好清理策略的话,会导致占用大量磁盘空间,最终可能会因磁盘空间不够而导致构建失败。并且在加载项目配置时,Jenkins也需要花费时间分析历史构建记录,页面加载的耗时会相应的增加。
1、丢弃旧的构建配置
如上图,配置最大保持 2 天之内的构建,如果超过 2 天的构建,则会在Job 执行前被清理掉,同时配置了最大保持构建数量为 30 个,意思就是如果 2 天内构建次数如果超过 30 次,则最多保留最近执行的 30 个构建。
2、使用Disk Uasge插件
不建议,使用此插件的过程中,发现可能会导致服务器卡顿。
3、定时清理tomcat日志
默认情况下,tomcat每天都会生成新的日志文件,且某些情况下,产生的日志文件体积会非常大,如果长期不清理,日志文件会越来越多,占用很多磁盘空间。
目前的处理方法是在Jenkins新建了一个定时任务,专门用来删除tomcat产生的日志文件。

09、设置构建时间
有些 Job 在执行构建时,由于某些原因导致构建挂起,耗时比较长,而这些长时间挂起的 Job 会导致 Jenkins 内存占用比较大,性能下降,严重的会直接导致 Jenkins 挂掉。
所以,我们需要设置构建超时时间来预防这种事情发生,一旦超过一定的时间,要让 Job 自动停止掉,如下:
设置全局属性
适当设置全局属性,可以避免在pipeline中重复写死一些固定值,例如输出日志地址、接口请求地址等等,而且当固定值需要修改时,只需要修改一次即可,不用去每个文件里面修改,方便维护。设置入口为:系统管理 -> 系统配置-> 全局属性-> Environment variables
如下图:
10、统一管理脚本
需要安装 Managed script 插件,该插件是为了在管理文件时创建 Script 脚本文件,然后在 Job 中配置直接使用,方便脚本的统一管理和维护。
插件安装完成后,进入“系统管理” —> “Managed files” ,点击 “Add a new Config” ,并选择 “Groovy file” 类型,创建一个新的 Groovy 脚本文件,然后输入我们要执行的脚本代码,如下:
创建完毕后,我们在 Job 中构建处选择 “Execute managed script” 就可以使用这些脚本了。
11、轻量备份
使用 ThinBackup 插件,允许我们对Jenkins配置信息进行全量或增量备份,由于插件不会保存构建历史和构建工件,所备份过程更为快捷,并且无需关闭Jenkins服务器。
还原备份:

最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

文档获取方式
加入我的软件测试交流群:632880530免费获取~(同行大佬一起学术交流,每晚都有大佬直播分享技术知识点)
这份文档,对于想从事【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!
以上均可以分享,只需要你搜索vx公众号:程序员雨果,即可免费领取
相关文章:
掌握这几个技巧,才敢称为Jenkins大神!
01、Performance插件兼容性问题 自由风格项目中,有使用 Performance 插件收集构建产物,但是截至到目前最新版本(Jenkins v2.298,Performance:v3.19),此插件和Jenkins都存在有兼容性问题…...
帷幄内容管理系统:从立人设、做内容到定向投流,品牌 KOS 体系打造「百万导购」
随着公域流量越来越贵,获客成本越来越高,品牌们已经越来越不满足于高曝光,而是更多地关注起销售转化率。继 KOL、KOC(关键意见消费者) 之后,KOS(关键意见销售)营销模式走入品牌的视野…...
5.vue3项目(五):实现顶部导航栏功能:导航栏静态搭建,菜单折叠功能实现,面包屑动态展示路径,刷新页面功能,全屏功能
目录 一、左侧菜单栏刷新,不要合并菜单 二、顶部tabbar静态搭建 1.新建文件 2.编辑页面 3.结果测试...
unittest 统计测试执行case总数,成功数量,失败数量,输出至文件,生成一个简易的html报告带饼图
这是一个Python的单元测试框架的示例代码,主要用于执行测试用例并生成测试报告。其中,通过unittest模块创建主测试类MainTestCase,并加载其他文件中的测试用例,统计用例的执行结果并将结果写入文件,最后生成一个简单的…...
推荐一款功能强大的在线文件预览工具-kkFileView
程序员的公众号:源1024,获取更多资料,无加密无套路! 最近整理了一波电子书籍资料,包含《Effective Java中文版 第2版》《深入JAVA虚拟机》,《重构改善既有代码设计》,《MySQL高性能-第3版》&…...
【Linux】磁盘阵列,了解不同raid的特点
一、raid和阵列卡介绍 1、什么是磁盘阵列: 磁盘阵列是利用虚拟化存储技术把很多块独立的磁盘组合成一个容量巨大的磁盘组,利用个别磁盘提供数据所产生加成效果提升整个磁盘系统效能。利用这项技术,将数据切割成许多区段,分别存放…...
Go 语言初探:从基础到实战
1.Go概述 程序是一段计算机指令的有序组合。程序算法数据结构。任何程序都可以将模块通过三种基本的控制结构(顺序、分支、循环)进行组合来实现。 Go(也称为Golang)是一种由Google开发的开源编程语言。设计目标是使编程更简单、…...
Kotlin文件和类为什么不是一对一关系
在Java中,一个类文件的public类名必须和文件名一致,如何不一致就会报异常,但是在kotlin的文件可以和类名一致,也可以不一致。这种特性,就跟c有点像,毕竟c的.h 和 .cpp文件是分开的。只要最终编译的时候对的…...
Kubernetes实战(四)-部署docker harbor私有仓库
1 Docker原生私有仓库Registry 1.1 原生私有仓库Registry概述 Docker的仓库主要分两类: 私有仓库公有仓库 共有仓库只要在官方注册用户,登录即可使用。但对于仓库的使用,企业还是会有自己的专属镜像,所以私有库的搭建也是很有…...
IDEA JAVA项目 导入JAR包,打JAR包 和 JAVA运行JAR命令提示没有主清单属性
一、导入JAR包 1、java项目在没有导入该jar包之前,如图:2、点击 File -> Project Structure(快捷键 Ctrl Alt Shift s),点击Project Structure界面左侧的“Modules”如图:3.在 “Dependencies” 标签…...
c#输入和输出
第一个c#程序 /* c#在编译时首先编译为通用中间语言(IL代码),并且将其存在程序集中 c#的程序集包括扩展名为.exe的可执行文件和扩展名为.dll的可供其他程序调用的库文件c#在执行时首先将程序集加载到CLR中,然后通过即时编译器编译…...
设置区块链节点输出等级为警告级,并把日志存储阈值位100MB并验证;
题目 获取指定区块链节点输出等级为警告级,并设置日志存储阈值位100MB并验证; 操作步骤 1.切换目录 cd nodes/127.0.0.1/node0 2.打开配置文件并修改 vim config.ini warn:警告...
perl列表创建、追加、删除
简介 perl 列表追加元素 主要是通过push和unshift函数来实现。其中,push是追加到列表尾,unshift是追加到列表头。 perl列表删除元素 主要是通过pop和shift函数来实现。其中,pop是从列表尾删除一个元素, shift是从列表头删除一…...
leetcode刷题日记:94. Binary Tree Inorder Traversal(二叉树的中序遍历)
给出二叉树的根结点,返回二叉树的中序遍历序列。 二叉树的中序遍历序列是先遍历左子树再遍历根结点然后再遍历右子树,在遍历左子树是这个结点是左子树的根结点,左子树有左子树和根结点右子树,也就是说在遍历的时候我们要递归遍历。…...
【漏洞复现】Aapache_Tomcat_AJP协议_文件包含漏洞(CVE-2020-1938)
感谢互联网提供分享知识与智慧,在法治的社会里,请遵守有关法律法规 文章目录 1.1、漏洞描述1.2、漏洞等级1.3、影响版本1.4、漏洞复现1、基础环境2、漏洞扫描3、漏洞验证 说明内容漏洞编号CVE-2020-1938漏洞名称Aapache_Tomcat_AJP文件包含漏洞漏洞评级高…...
RabbitMQ消息可靠性投递
RabbitMQ消息投递的路径为: 生产者 —> 交换机 —> 队列 —> 消费者 在RabbitMQ工作的过程中,每个环节消息都可能传递失败,那么RabbitMQ是如何监听消息是否成功投递的呢? 确认模式(confirm)可以监…...
汽车网络安全渗透测试概述
目录 1.汽车网络安全法规概述 1.1 国外标准 1.2 国内标准 2.汽车网络安全威胁分析 2.1 汽车网络安全资产定义 2.2 汽车网络安全影响场景及评级示例 3.汽车网络安全渗透测试描述 3.1 参考法规 3.2 渗透测试内容 4.小结 1.汽车网络安全法规概述 近年来,汽车…...
NOIP2023模拟14联测35 charlotte
题目大意 给你一棵有 n n n个节点的树,并用 01 01 01串告诉你哪些节点上有棋子(恰好一棵)。 你可以进行若干次操作,每次操作可以将两颗距离至少为 2 2 2的棋子向彼此移动一步。 问能否通过若干次操作使得所有的棋子都在一个点上…...
绿色科技和可持续发展技术
一、绿色科技和可持续发展技术的定义 绿色科技和可持续发展技术是指那些利用可再生资源、减少环境污染和促进可持续发展的技术。这些技术不仅可以提高人们的生活质量,同时也可以减少对自然环境的破坏,并且能够为未来的可持续发展提供保障。 二、绿色科…...
建链时,please install openssl! use “openssl version“ command to check.
please install openssl! use “openssl version” command to check. 但是我已经安装了 编辑build_chain.sh文件 也可以用vi或者gedit命令 将 [ ! -z “ ( o p e n s s l v e r s i o n ∣ g r e p 1.0.2 ) " ] ∣ ∣ [ ! − z " (openssl version | grep 1.0.2)…...
【杂谈】-递归进化:人工智能的自我改进与监管挑战
递归进化:人工智能的自我改进与监管挑战 文章目录 递归进化:人工智能的自我改进与监管挑战1、自我改进型人工智能的崛起2、人工智能如何挑战人类监管?3、确保人工智能受控的策略4、人类在人工智能发展中的角色5、平衡自主性与控制力6、总结与…...
《Qt C++ 与 OpenCV:解锁视频播放程序设计的奥秘》
引言:探索视频播放程序设计之旅 在当今数字化时代,多媒体应用已渗透到我们生活的方方面面,从日常的视频娱乐到专业的视频监控、视频会议系统,视频播放程序作为多媒体应用的核心组成部分,扮演着至关重要的角色。无论是在个人电脑、移动设备还是智能电视等平台上,用户都期望…...
【入坑系列】TiDB 强制索引在不同库下不生效问题
文章目录 背景SQL 优化情况线上SQL运行情况分析怀疑1:执行计划绑定问题?尝试:SHOW WARNINGS 查看警告探索 TiDB 的 USE_INDEX 写法Hint 不生效问题排查解决参考背景 项目中使用 TiDB 数据库,并对 SQL 进行优化了,添加了强制索引。 UAT 环境已经生效,但 PROD 环境强制索…...
ssc377d修改flash分区大小
1、flash的分区默认分配16M、 / # df -h Filesystem Size Used Available Use% Mounted on /dev/root 1.9M 1.9M 0 100% / /dev/mtdblock4 3.0M...
Keil 中设置 STM32 Flash 和 RAM 地址详解
文章目录 Keil 中设置 STM32 Flash 和 RAM 地址详解一、Flash 和 RAM 配置界面(Target 选项卡)1. IROM1(用于配置 Flash)2. IRAM1(用于配置 RAM)二、链接器设置界面(Linker 选项卡)1. 勾选“Use Memory Layout from Target Dialog”2. 查看链接器参数(如果没有勾选上面…...
【android bluetooth 框架分析 04】【bt-framework 层详解 1】【BluetoothProperties介绍】
1. BluetoothProperties介绍 libsysprop/srcs/android/sysprop/BluetoothProperties.sysprop BluetoothProperties.sysprop 是 Android AOSP 中的一种 系统属性定义文件(System Property Definition File),用于声明和管理 Bluetooth 模块相…...
自然语言处理——循环神经网络
自然语言处理——循环神经网络 循环神经网络应用到基于机器学习的自然语言处理任务序列到类别同步的序列到序列模式异步的序列到序列模式 参数学习和长程依赖问题基于门控的循环神经网络门控循环单元(GRU)长短期记忆神经网络(LSTM)…...
MySQL用户和授权
开放MySQL白名单 可以通过iptables-save命令确认对应客户端ip是否可以访问MySQL服务: test: # iptables-save | grep 3306 -A mp_srv_whitelist -s 172.16.14.102/32 -p tcp -m tcp --dport 3306 -j ACCEPT -A mp_srv_whitelist -s 172.16.4.16/32 -p tcp -m tcp -…...
纯 Java 项目(非 SpringBoot)集成 Mybatis-Plus 和 Mybatis-Plus-Join
纯 Java 项目(非 SpringBoot)集成 Mybatis-Plus 和 Mybatis-Plus-Join 1、依赖1.1、依赖版本1.2、pom.xml 2、代码2.1、SqlSession 构造器2.2、MybatisPlus代码生成器2.3、获取 config.yml 配置2.3.1、config.yml2.3.2、项目配置类 2.4、ftl 模板2.4.1、…...
基于Java+VUE+MariaDB实现(Web)仿小米商城
仿小米商城 环境安装 nodejs maven JDK11 运行 mvn clean install -DskipTestscd adminmvn spring-boot:runcd ../webmvn spring-boot:runcd ../xiaomi-store-admin-vuenpm installnpm run servecd ../xiaomi-store-vuenpm installnpm run serve 注意:运行前…...
