玩Devops的小伙伴应该对Jenkins都有了解。

Github上16.8k的Star的项目,1500+的构建、发布等自动化插件可供选择,事实上的业界CICD标准领导者。

JFrogCoding等一众你能见到的企业级的Devops解决方案基本上都是用Jenkins做引擎。

产研流水线用Jenkins可以说真的很香。​但是前几天它突然不听话了,它也有不香的时候,手动裂开。

前几天在做一个jenkins job的迁移,由于是第一次搞,在迁移的过程中遇到了小意外,出了点小插曲。

起因是在迁移的过程中发现一个历史的ci的pipeline job对应build目录特别大,执行下面的命令压缩备份起来异常耗时,等的花儿都谢了。

# tar -czvf a-jobs-bak.tar.gz a-jobs

熟悉jenkins的同学都应该知道build目录是用来存放job的历史构建记录的,于是进去之后执行下面的命令发现有近 N w个历史构建记录的文件夹没删除。

# ls | wc -l

所以就到job的配置页面查看job的配置,发现该job并没有配置丢弃旧的构建的策略。

然后愉快的给该job配置了一个丢弃旧的构建的策略

本以为万事大吉,静静的等着jenkins清理历史构建记录即可,不想一会儿,就有不少同事反馈构建的流水线响应缓慢,有不少超时。

于是赶紧在浏览器中访问jenkins,这个时候发现jenkins页面加载已经异常缓慢,基本上已经打不开了。

没有多想,第一反应就是刚配置的丢弃旧的构建策略生效后由于文件过多,整个jenkins都在删文件导致的,所以就赶紧重启jenkins。

# systemctl restart  jenkins

起来之后发现,浏览器中可以访问jenkis,但是依然比较缓慢,这个时候感觉上面配置的丢弃旧的构建的策略依然在起作用,服务器依然在忙于删文件。

然后就立即删除上面给这个job配置的丢弃旧的构建的策略,紧接着再次重启jenkins服务,服务起来后没有再次出现响应缓慢卡顿的现象,同事们反馈所有研发的流水线恢复正常,问题得到解决。

这里要说明的是设置丢弃旧的构建策略在提交之后并不会立即生效,而是在有新的任务进来并且执行完成之后才会触发。

由于上面操作的是生产的ci,所有研发人员的构建部署事件都会通过中间件向上面提交,配置的丢弃旧的构建的策略提交之后立马会有任务进来。

这个时候就触发了丢弃旧的构建的执行,于是jenkins就开始忙于删除数以万计的文件,然后就出现了上文中所述的问题。

总结一下本次得到的教训就是在正常的jenkins服务时间内一定要谨慎的设置或者修改job的的丢弃旧的构建策略来让jenkins去主动去删除大量的历史构建记录,这会是个灾难,会引起你的服务不可用。

所以我们在给有需要job配置丢弃旧的构建策略之前一定要先确定下服务器上历史构建记录的数量。

如果该job下历史构建记录较多,达到了以万计,建议你选择在正常的jenkins服务时间内手动分批删除,或者在服务使用量低峰或者服务维护时间进行删除操作。

如果需要删除的文件数较少,你可以通过设置或者修改job的丢弃旧的构建策略等待jenkins自动删除。

更推荐的做法是在job创建之初就给job配置丢弃旧的构建策略并且指定保持构建的最大次数为一个较小的值。

Jenkins开启丢弃旧的构建?你可要小心啊!的更多相关文章

  1. 关于jenkins旧的构建导致磁盘空间不足问题

    简述: Jenkins在每一次的执行构建后,都会对该构建的项目生成一个历史构建记录以及生成一份历史构建的项目发布包,长期累积可能会占用大量磁盘空间 jenkins构建jobs路径如下图: 解决办法: ...

  2. jenkins学习之自动打包构建nodejs应用

    上一节记录了下jenkins在centos下的安装,这节继续,说下怎么使用jenkins和nodejs进行自动打包更新服务. 创建任务 创建任务比较简单,这里我们创建自由风格项目: General信息 ...

  3. 利用Jenkins自动部署工具间接构建kettle的调度平台

    关于Jenkins的介绍我就不说了,自己百度,因为这个工具调用脚本只是他的功能的冰山一角,其他功能我也不能理解,因为不是那个领域.        下面我就介绍一下为什么我们需要一个调度平台,以及学习完 ...

  4. Jenkins 开启用户注册机制及用户权限设置

    Jenkins 开启用户注册机制及用户权限设置   by:授客 QQ:1033553122 步骤 1.  系统管理-Configure Global Security 2.  设置

  5. Linux CentOS7下svn+tomcat9.0+maven3.3+jenkins实现web项目自动构建与远程发布

    CentOS7下svn+tomcat9.0+maven3.3+jenkins实现web项目自动构建与远程发布 by:授客 QQ:1033553122 目录 一.    实践环境. 1 二.    安装 ...

  6. Jenkins系列之-—06 Ant构建

    一.Ant 简介&构建环境 Apache Ant 是由 Java 语言开发的工具 构建ant环境: 1). 安装jdk,设置JAVA_HOME ,PATH ,CLASS_PATH 2). 下载 ...

  7. 【06】Jenkins:Gitlab 自动触发构建以及钉钉通知

    写在前面的话 在某些时候,我们希望能够实现这样一个功能,当用户提交东西到 gitlab 上的时候,希望它能够自动触发构建,发布到我们需要的环境. 目前我们内部有做类似的需求:产品提交原型到 gitla ...

  8. jenkins实现手动选择分支构建项目-Git Paramater

    先下载插件: Git Paramater 参照: jenkins-参数化构建(三)插件:Git Parameter https://www.cnblogs.com/zhaojingyu/p/98624 ...

  9. jenkins在windows平台自动化构建代码

    jenkins服务端:centos6.8 客户端:windows server2012 windows10 工具:cwRsync 注:复制为jenkins工作目录到网站目录,无需服务端. 1.安装je ...

随机推荐

  1. 用python+sklearn(机器学习)实现天气预报 准备

    用python+sklearn机器学习实现天气预报 准备 项目地址 系列教程 0.流程介绍 1. 环境搭建 a.python b.涉及到的机器学习相关库 sklearn panda seaborn j ...

  2. 用隧道协议实现不同dubbo集群间的透明通信

    用隧道协议实现不同dubbo集群间的透明通信 前言 笔者最近完成了一个非常有意思的隧道机制(已在产线运行),可以让注册到不同zookeeper之间的dubbo集群之间能够正常进行通信.如下图所示: 例 ...

  3. java反射-Method中的invoke方法的用法-以及函数式接口和lambda表达式

    作者最近研究框架底层代码过程中感觉自己基础不太牢固,于是写了一点案例,以防日后忘记 接口类:Animals 1 public interface Animals { 2 3 public void e ...

  4. 攻防世界 - Web(一)

    baby_web: 1.根据题目提示,初始页面即为index,将1.php改为index.php,发现依然跳转成1.php,尝试修改抓包,出现如下回显, 2.在header中获取flag, flag: ...

  5. 三种梯度下降算法的区别(BGD, SGD, MBGD)

    前言 我们在训练网络的时候经常会设置 batch_size,这个 batch_size 究竟是做什么用的,一万张图的数据集,应该设置为多大呢,设置为 1.10.100 或者是 10000 究竟有什么区 ...

  6. java 日期与时间操作

    我们先来了解一下基本的概念 日期 2020-11-21 2020-11-22 时间 15:36:43 2020-11-21 15:36:43 时区 北京时间 2020-11-21 15:36:43 东 ...

  7. uni-app开发经验分享十八:对接第三方h5

    1.uni-app中对接第三方为了防止跳出app使用了webview <template> <view> <web-view :src="url" @ ...

  8. canvas星空背景特效+CSS旋转相册学习

    今天在看帖子的时候,看到了个有趣的css旋转相册,刚好之前做了一个星空背景dome,这里给大家分享下代码: 旋转相册参考:https://blog.csdn.net/gitchatxiaomi/art ...

  9. 当Vue可视化工具创建不了项目时的解决办法!

    当Vue可视化工具创建不了项目时的解决办法! 当你尝试用可视化工具创建一个Vue的项目的时候,报错, 出现什么indexOf什么什么的错误! 我的解决办法是把可视化工具删除掉,重新下载! 如果你是 n ...

  10. Java层面上下文切换

    前言 在过去单CPU时代,单任务在一个时间点只能执行单一程序.之后发展到多任务阶段,计算机能在同一时间点并行执行多任务或多进程.虽然并不是真正意义上的"同一时间点",而是 多个任务 ...