成为jenkins必备的几个技巧(代码片段)

一始如衷 一始如衷     2022-12-04     157

关键词:

Performance插件兼容性问题

自由风格项目中,有使用 Performance 插件收集构建产物,但是截至到目前最新版本(Jenkins v2.298,Performance:v3.19),此插件和Jenkins都存在有兼容性问题,会导致项目配置页面table,div错位,而导致无法保存配置,这个问题已经存在了好长时间了(至少半年),插件作者一直没有修复,目前在项目中要想使用这个插件,有以下三种解决办法:

  • 将自由风格项目切换为流水线风格

  • 服务器上手动修改项目的config.xml文件以达到保存配置的效果

  • Jenkins版本降级,经过测试,此插件在v2.263.4 LTS上可以正常使用,降级前做好备份工作,以及考虑其他插件的兼容性问题

修改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项目构建,等待完成后点击访问测试报告页面,会发现已经可以正常访问了;

自定义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 参数值修改为正确的值。

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

Windows节点机无法运行jnlp文件

在节点机双击jnlp文件没有反应时,可以尝试用命令行方式运行此文件,cmd进入jnlp文件目录下,运行 javaws slave-agent.jnlp,可以查看具体的错误提示,如下:


上图中这种情况,只需要修改下java安全配置即可解决,其他情况再具体分析。

关闭CSRF防护

Jenkins v2.204.6之前的版本,要想关闭CSRF防护,只需要在全局安全配置中禁用相关配置即可,但是较高版本的 Jenkins 默认均开启CSRF防护且删除了禁用的入口。要想禁用CSRF防护,只能通过配置参数的方式。

Jenkins若是跑在Tomcat下,只需在tomcat启动脚本中加入配置如下:

-Dhudson.security.csrf.GlobalCrumbIssuerConfiguration.DISABLE_CSRF_PROTECTION=true

若是以jar包形式部署的,只需在启动时加上配置参数即可。

修改 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: 最大内存的永久保存区域大小这几个参数也不是配置越大越好,具体要根据所在机器实际内存和使用大小配置。

配置优化减少磁盘空间占用

Job 构建历史较多时,如果没有配置好清理策略的话,会导致占用大量磁盘空间,最终可能会因磁盘空间不够而导致构建失败。并且在加载项目配置时,Jenkins也需要花费时间分析历史构建记录,页面加载的耗时会相应的增加。

1、丢弃旧的构建配置


如上图,配置最大保持 2 天之内的构建,如果超过 2 天的构建,则会在Job 执行前被清理掉,同时配置了最大保持构建数量为 30 个,意思就是如果 2 天内构建次数如果超过 30 次,则最多保留最近执行的 30 个构建。

2、使用Disk Uasge插件
不建议,使用此插件的过程中,发现可能会导致服务器卡顿。

3、定时清理tomcat日志
默认情况下,tomcat每天都会生成新的日志文件,且某些情况下,产生的日志文件体积会非常大,如果长期不清理,日志文件会越来越多,占用很多磁盘空间。

目前的处理方法是在Jenkins新建了一个定时任务,专门用来删除tomcat产生的日志文件。

设置构建时间

有些 Job 在执行构建时,由于某些原因导致构建挂起,耗时比较长,而这些长时间挂起的 Job 会导致 Jenkins 内存占用比较大,性能下降,严重的会直接导致 Jenkins 挂掉。

所以,我们需要设置构建超时时间来预防这种事情发生,一旦超过一定的时间,要让 Job 自动停止掉,如下:

设置全局属性
适当设置全局属性,可以避免在pipeline中重复写死一些固定值,例如输出日志地址、接口请求地址等等,而且当固定值需要修改时,只需要修改一次即可,不用去每个文件里面修改,方便维护。设置入口为:系统管理 -> 系统配置-> 全局属性-> Environment variables

如下图:

统一管理脚本

需要安装 Managed script 插件,该插件是为了在管理文件时创建 Script 脚本文件,然后在 Job 中配置直接使用,方便脚本的统一管理和维护。

插件安装完成后,进入“系统管理” —> “Managed files” ,点击 “Add a new Config” ,并选择 “Groovy file” 类型,创建一个新的 Groovy 脚本文件,然后输入我们要执行的脚本代码,如下:


创建完毕后,我们在 Job 中构建处选择 “Execute managed script” 就可以使用这些脚本了。

轻量备份

使用 ThinBackup 插件,允许我们对Jenkins配置信息进行全量或增量备份,由于插件不会保存构建历史和构建工件,所备份过程更为快捷,并且无需关闭Jenkins服务器。


还原备份:

最后:【可能给予你助力的视频教程】

这些资料,对于想学习【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!凡事要趁早,特别是技术行业,一定要提升技术功底。希望对大家有所帮助,需要的小伙伴点击下方插件扫码免费领取:

vim中的几个技巧(代码片段)

Hello,大家好,我是爱吃香蕉的猴子,记录工作中工具的细节1、清除空格:%s/\\s+KaTeXparseerror:Undefinedcontrolsequence:\\satposition17:…/行尾空格:\\̲s̲\\+行首空格:^+\\s+2、查看格式问题:setlist3、比如&# 查看详情

玩转github的几个实用小技巧(代码片段)

github仓库当图床(好处是免费,缺点是加载慢需要那啥上网)直接读取repo地址https://github.com///blob//images/?raw=true或者部署到git-pageshttp://wangguibin.github.io/post-images/1560696125636.png例如:https://github.com/WangGuibin/MyFilesRepo/ 查看详情

第八天,scrapy的几个小技巧(代码片段)

 一.微博模拟登陆1.百度搜微博开放平台可满足爬取量不大的情况2.微博模拟登陆和下拉鼠标应对ajax加载fromseleniumimportwebdriverimporttimebrowser=webdriver.Chrome()browser.get(‘https://www.weibo.com‘)time.sleep(10)browser.find_element_by_css_se 查看详情

css的几个小技巧(代码片段)

本文收录css设置样式的一些小技巧1.设置文字在块级标签居中(包括水平居中和垂直居中)水平居中方法一:使用text-aligntext-align:center方法二:目标标签的父级标签设置position:relative,目标标签设置margin:auto.parentposition:relative.targe... 查看详情

es6的几个实用技巧,你了解吗?(代码片段)

本文给大家分享了es6的几个实用技巧,非常不错,具有参考借鉴价值,感兴趣的朋友一起学习吧 Hack#1交换元素利用数组解构来实现值的互换leta=‘world‘,b=‘hello‘[a,b]=[b,a]console.log(a)//->helloconsole.log(b)//->worldHack#2调试我们... 查看详情

python中使用字典的几个小技巧(代码片段)

...,这种形式可以直接传给函数作为关键字参数。说说适用的几种情况。1.1搜索拼接条件当应用中使用类似SQLAlchemy的ORM形式读取数据的时候,不同搜索条件,传入给ORM的搜索参数也随之改变。下面是图书表的部分数据(只展示了... 查看详情

调用jenkins接口api的几个例子(代码片段)

记录瞬间近期操作Jenkins调用比较多,当然Jenkins本身也提供了jenkins-cli.jar的使用方法,可以直接通过命令行进行调用,但是,由于不想引入太多的jar包,导致直接使用Jenkinsapi需求强烈下面就把近期收集到的一些常见用法做一个简... 查看详情

提升代码可读性,减少if-else的几个小技巧(代码片段)

前言相信大家或多或少都接触过拥有庞大 ifelse 的项目代码吧,多重嵌套的 ifelse 在维护的时候真的让人很恼火,有时候一个bug排查下来,严重感觉身体被掏空。本文并未有消灭或歧视 ifelse的意思,ifelse 的... 查看详情

idea的几个常用配置,日常开发必备。(代码片段)

用了IDEA有很长时间了,身边的同事朋友也都慢慢的开始都从Eclipse切换到IDEA了,其实无论是Eclipse还是IntelliJIDEA都是开发工具而已,各自都有优点。但是刚从Eclipse切换到IDEA的时候还是很不适应的,有些人用了一段时间的IDEA适应... 查看详情

nginx与安全有关的几个配置(代码片段)

Nginx与安全有关的几个配置原创: 37丫37 运维咖啡吧 昨天安全无小事,安全防范从nginx配置做起上一篇文章《Nginx的几个常用配置和技巧》收到了不错的反馈,这里再总结下nginx配置中与安全有关的一些配置隐藏版本号... 查看详情

jenkins-同时运行单个构建的实例(代码片段)

我希望能够同时运行同一个Jenkins工作的几个版本。例:Build[*jenkins_job_1*]:调用参数'A'的ant脚本Build[*jenkins_job_1*]:调用参数'B'的ant脚本必要时重复作业的每个实例同时运行,而不是通过队列运行。我想这样做的原因是为了避免必... 查看详情

bert的几个可能的应用(代码片段)

...个NLP界,其在11个主流NLP任务中都取得优异的结果,因此成为NLP领域最吸引人的一个模型。简单来说,BERT就是在训练了大量的文本语料(无监督)之后,能够在对英语中的单词(或中文的汉字)给 查看详情

前端工程师必备的几个实用网站

(该文章为转载:转自:http://blog.csdn.net/slowlifes/article/details/73896286) 一、配色类网站http://colorhunt.co这个网站给我们提供了很多的配色方案,我们直接使用就OK了。使用方法也很简单,鼠标移动到对应的颜色上,我们就可以看到... 查看详情

jenkins部署设置,权限管理,pipeline语法自动构建,必备插件等(代码片段)

jenkinsdocker安装官网地址文档:https://www.jenkins.io/doc/book/installing/docker/官网使用的是在Docker服务器中启用TLS。来管理docker,并且需要更新官方镜像为了方便可以直接使用挂在的形式使得jenkins使用docker命令dockerrun-itd--namejenkin... 查看详情

用linux感觉低效吗?来看看这几个技巧!(代码片段)

Linux已经成为目前最火的操作系统之一,尽管现在的Linux用户很多,但很多使用Linux的同学发现,他们在Linux下的工作效率并不高,那么这是为什么呢?其实使用Linux也可以很舒适,通过一些技巧,也可以让工作效率大大提升。本... 查看详情

jenkins简单部署设置,权限管理,pipeline语法自动构建,必备插件等(代码片段)

jenkinsdocker安装官网地址文档:https://www.jenkins.io/doc/book/installing/docker/官网使用的是在Docker服务器中启用TLS。来管理docker,并且需要更新官方镜像为了方便可以直接使用挂在的形式使得jenkins使用docker命令dockerrun-itd--namejenkin... 查看详情

构建镜像的几个小技巧

构建镜像的几个小技巧构建上下文执行 ​​dockerbuild​​ 命令时,当前的工作目录被称为构建上下文。默认情况下,Dockerfile就位于该路径下。也可以通过 ​​-f​​ 参数来指定dockerfile,但docker客户端会将当前工... 查看详情

创建一个vue项目必备的几个插件

第一步npm安装首先:先从nodejs.org中下载nodejs打开控制命令行程序(CMD),node-v检查是否正常使用淘宝NPM 镜像npm install -g cnpm --registry=https://registry.npm.taobao.org第二步项目初始化1.第一步:安装vue-clicnpminstallvue-cli-g& 查看详情