文档章节

删除Jenkins旧的构建来释放磁盘空间

shzwork
 shzwork
发布于 05/19 18:19
字数 1343
阅读 1
收藏 0

删除Jenkins旧的构建来释放磁盘空间
前言
配置Discard old builds选项
用Configuration Slicing插件批量配置Discard old builds选项
在Jenkins Server上手工删除旧的build
移走和JENKINS_HOME相同磁盘分区的目录
删除没用的Docker镜像
参考文档
删除Jenkins旧的构建来释放磁盘空间
前言
随着Jenkins build的次数增多,JENKINS_HOME目录会占用越来越多的磁盘空间(可以通过du -sh * 命令查看磁盘空间)。

对非容器安装的Jenkins可以通过ps -ef | grep jenkins 查看JENKINS_HOME,对容器化安装的Jenkins可以通过docker inspect jenkins | grep JENKINS_HOME 查看JENKINS_HOME。

这个时候就需要考虑如何删除Jenkins旧的build了。

Jenkins 提供了“Discard old builds”的选项可以配置保留几天/最多几个的build 和 artifacts,缺省这个选项不会勾上。不勾选时,默认值为365,显然这个值过大了。

另外,我们也可以通过命令行在Jenkins server上直接删除旧的build来立即释放磁盘空间。

配置Discard old builds选项
打开一个Jenkins job的Configure页面,勾选上”Discard old builds”,填入Day of keep builds (保留几天的build记录)和Max# of builds to keep (保留最多几个build记录)。

点击Advanced按钮,还可以填入Days of keep artifacts (保留几天的artifact)和 Max# of builds to keep with artifacts (保留最多几个artifacts)。

通常来讲,如果磁盘空间足够,这4个选项设置为15就可以了(也就是两周 + 1天)。

如果磁盘空间不足时,可以将这4个选项都设置为3。

Jenkins job在每次build结束后(无论成功还是失败)都会自动执行discard old builds,这样当下次执行build后,这个job占用的磁盘空间就会被释放。

$JENKINS_HOME/jobs/[JOB_NAME]/builds 目录存储了该Jenkins job的全部构建记录(目录名为Build Number)。

$JENKINS_HOME/jobs/[JOB_NAME]/builds/BUILD_NUMBER/artifacts 目录存储了该次构建的artifact。

用Configuration Slicing插件批量配置Discard old builds选项
如果已经配置了很多Jenkins job,逐个来修改Discard old builds,非常费时费力。好在Jenkins有Configuration Slicing plugin可以批量来配置Jenkins job。

安装好 Configuration Slicing plugin 后,重启Jenkins。

然后打开Manage Jenkins -> Configuration Slicing,分别打开以下菜单,在左边的“Configured Value”中填入新的值。

Discard Old Builds Slicer - Days to keep artifacts
Discard Old Builds Slicer - Days to keep builds
Discard Old Builds Slicer - Max # of builds to keep
Discard Old Builds Slicer - Max # of builds to keep with artifacts
比如要配置“Days to keep artifacts”为3天,就在对应Job的那一行的左边的”Configured Value”填入3。

打开Jenkins job的Configure页面,可以看到”Discard old builds”选项的值已经被修改。

亲测Configuration Slicing插件(1.47)可以对Free style类型的Jenkins job进行修改;但是不能对Pipeline类型的Jenkins job进行修改,在配置界面找不到Pipeline类型的Job,手工输入Job名称也无法修改。

在Jenkins Server上手工删除旧的build
如果想立即释放磁盘空间,可以在Jenkins Server上手工删除旧的build。

比如在$JENKINS_HOME/jobs/[JOB_NAME]/builds 目录下删除30天之前的构建记录:

find [1-9]* -type d -mtime +30 -exec rm -rf {} \;
1
比如在$JENKINS_HOME/jobs/[JOB_NAME]/builds 目录下删除Build Number为1到7的构建记录:

find [1-7] -type d -exec rm -rf {} \;
1
移走和JENKINS_HOME相同磁盘分区的目录
如果其它磁盘分区还有空间,可以考虑将和JENKINS_HOME相同磁盘分区的其它目录移动到其它磁盘分区(可以通过df -h 查看磁盘分区使用情况)。

比如Maven local repository目录和JENKINS_HOME在同一个磁盘分区,可以考虑将Maven local repository目录移动到另一个磁盘分区,并相应地修改Maven settings.xml中的localRepository。

删除没用的Docker镜像
在用Jenkins调用Docker打镜像后,日积月累,Jenkins server上会累积越来越多的Docker镜像缓存,会占用大量的磁盘空间。

查看Docker镜像缓存占用磁盘空间

通常Docker镜像缓存在/var/lib/docker/overlay ,其中/var/lib/docker 为Docker root directory,overlday 为Storage Driver。

可以运行docker info | egrep -i 'root|storage' 查看Docker root directory和Storage Driver。

运行du -sh /var/lib/docker/overlay 查看Docker镜像缓存占用的磁盘空间大小。

删除全部Docker镜像

如果Jenkins server只是用Docker打镜像,并没有运行容器,可以执行以下命令删除全部Docker镜像:

docker rmi $(docker images -a -q)
1
在每次构建后删除指定的Docker镜像

在Jenkins Pipeline中最后加入一个”Clean Up”的stage,执行类似以下的命令删除指定的Docker镜像:

# Remove specific image
# docker images | grep ${IMAGE_NAME}  | grep ${IMAGE_TAG} | awk '{print $3}' | xargs docker rmi
docker images | grep 'busybox'  | grep 'latest' | awk '{print $3}' | xargs docker rmi
1
2
3
参考文档
https://support.cloudbees.com/hc/en-us/articles/215549798-Deleting-Old-Builds-Best-Strategy-for-Cleanup-and-disk-space-management
https://stackoverflow.com/questions/31389483/find-and-delete-file-or-folder-older-than-x-days
https://www.digitalocean.com/community/tutorials/how-to-remove-docker-images-containers-and-volumes
--------------------- 
作者:nklinsirui 
来源:CSDN 
原文:https://blog.csdn.net/nklinsirui/article/details/80847925 
版权声明:本文为博主原创文章,转载请附上博文链接!

本文转载自:https://blog.csdn.net/nklinsirui/article/details/80847925

shzwork
粉丝 11
博文 588
码字总数 10198
作品 0
厦门
私信 提问
Jenkins服务历史记录处理

原因 Jenkins 服务会记录下构建历史,还有每一次构建产生的结果文件。比如WAR包、JAR包、ZIP包。占用了大量的磁盘空间。对于构建记录,是占用不来太多空间的,所以需要处理掉每次构建产生的结...

江南红衣
2016/12/15
91
0
关于Jenkins日志爆满的解决方法

120: 31303040312e312e 312e313e0d0a436f 6e746163743a2073 69703a3130304031 100@1.1. 1.1>..Co ntact:.s ip:100@1140: 32372e302e312e31 3a353236370d0a43 5365713a2031204f 5054494f4e530......

踏雪无痕SS
2018/11/26
0
0
jenkins实战之发布一个php小的项目

1、点击“新建按钮” 2、输入项目名称“php-deploy” 3、选择“构建一个自由风格的软件项目” 4、同时我也勾选了“丢弃旧的构建”,这项功能主要是为了节省服务器空间,我设置为“保持构建的...

kesungang
2017/05/16
0
0
jenkins自动部署应用到tomcat中,编译后shell脚本的简单示例

  jenkins的安装这里就不做描述了,很简单的 百度搜索一下即可   这里安装的jenkins-2.39-1.1 wget http://pkg.jenkins-ci.org/redhat/jenkins-2.39-1.1.noarch.rpm sudo rpm --import ht...

江湖前辈黄药师
2018/08/13
0
0
Jenkins 2.175 发布,开源 CI/CD 引擎

2.175 (2019-04-28) 中有什么新内容 50 0 5 Community reported issues: 2×JENKINS-57244 1×JENKINS-47896 1×JENKINS-57258 当构建完成后,更新状态图标 (issue 16750) 插件管理页面提供了...

Jenkins中文社区
05/07
0
0

没有更多内容

加载失败,请刷新页面

加载更多

OSChina 周五乱弹 —— 要步入《攻壳机动队》的世界了么?

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @ nnnm:说到音乐,这段一直是纯音乐在循环。每次听到久石让的Summer时心上都会莫名的感觉着轻松。《菊次郞的夏天》竟然是北野武的片子,没有...

小小编辑
13分钟前
24
2
C++ STL set::find的用法

参考: http://blog.csdn.net/lihao21/article/details/6302196 /* class for function predicate * - operator() returns whether a person is less than another person */ c......

shzwork
23分钟前
0
0
抽象同步队列AQS——AbstractQueuedSynchronizer锁详解

AQS——锁的底层支持 谈到并发,不得不谈ReentrantLock;而谈到ReentrantLock,不得不谈AbstractQueuedSynchronizer(AQS)! 类如其名,抽象的队列式的同步器,AQS定义了一套多线程访问共享资...

须臾之余
今天
3
0
springboot配置百度UEditor 富文本详解

富文本简介 UEditor是由百度web前端研发部开发所见即所得富文本web编辑器,具有轻量,可定制,注重用户体验等特点,开源基于MIT协议,允许自由使用和修改代码... 准备工作 ueditor需要单独文...

wotrd
昨天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部