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

删除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://my.oschina.net/u/4000302/blog/3051428

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Jenkins 是一个持续集成和持续交付工具,用于自动化构建、测试和部署软件。当我们在使用 Jenkins 进行软件构建和测试时,可能会占用大量的磁盘空间。因此,释放 Jenkins 占用的磁盘空间是非常重要的。 要释放 Jenkins 占用的磁盘空间,我们可以采取以下措施: 1. 删除无用的构建记录:在 Jenkins 界面中,我们可以通过删除构建记录来释放磁盘空间。对于已经成功构建并且不再需要的构建记录,我们可以选择删除它们,避免占用不必要的空间。 2. 清理工作目录:在 Jenkins 的配置中,我们可以设置构建的工作目录。在构建完成后,这些工作目录可能会留下一些中间或临时文件,占用磁盘空间。通过定期清理这些工作目录,可以释放磁盘空间。 3. 限制日志文件大小:Jenkins 会记录每个构建的输出日志,这些日志文件可能会占用大量的磁盘空间。我们可以通过在 Jenkins 的全局配置中设置日志文件大小限制来控制日志文件的大小,定期删除的日志文件,以释放磁盘空间。 4. 使用存储插件:如果我们的 Jenkins 部署在一个分布式系统中,我们可以考虑使用一些存储插件来帮助管理磁盘空间。这些存储插件可以将构建数据存储在外部的存储系统中,从而减少对 Jenkins 服务器本身的磁盘占用。 总之,通过以上几个措施,我们可以释放 Jenkins 占用的磁盘空间,保持系统的正常运行。及时清理不必要的构建记录和临时文件,可以提高系统的性能和效率,并确保 Jenkins 能够持久地为我们提供持续集成和持续交付服务。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值