问题描述:
备份jenkins目录时发现Jenkins目录有320G,占用空间大,而且导致备份文件也比较大且备份时间较长。
原因分析:
Jenkins目录下有一个jobs文件夹占用空间288G,jobs文件夹中主要存放Jenkins项目的一些配置文件和构建日志,构建日志长时间未清理有成千上百的记录。如下图所示:
解决方法:
Python脚本自动清理,判断该项目是否已经构建了60次以上,保留最近50次构建。
使用时只需修改jobs_path变量(jenkins目录)即可。
代码如下:
#!/usr/bin/python
#coding:utf-8
import os
import shutil
import codecs
jobs_path = "/home/jenkins/jobs"
for dirname in os.listdir(jobs_path):
next_path = jobs_path + "/%s/nextBuildNumber" % dirname #nextBuildNumber文本内容为下一次构建序号,每个job下都有这个文件
if os.path.exists(next_path):
print(next_path)
next_build_no = int(codecs.open(next_path).read())
print(dirname, next_build_no)
if next_build_no > 60: #判断该项目是否已经构建了60次以上
for i in range(next_build_no - 50, 1, -1): #保留最近50次构建
job_path = jobs_path + "/%s/builds/%s" % (dirname, i)
if os.path.exists(job_path):
print("delete " + job_path)
shutil.rmtree(job_path)
清理结果:
清理之后,Jenkins目录大小为45G,删除了200多G日志。
其他补充:
如果你的Jenkins版本比较低,.\jenkins\jobs\项目\builds目录下的日志目录如下所示(日志目录由时间拼接而成),请使用下列代码。
Python脚本自动清理,判断该项目是否已经构建了60次以上,保留最近50次构建,使用时只需修改jobs_path变量(jenkins目录)即可。
代码如下:
将代码保存为xxx.py文件,使用python xxx.py >clean.log命令运行,输出日志以便排错。
#coding:utf-8
import os
import shutil
import codecs
jobs_path = "E:\\jenkins\\jobs\\" #Jenkins目录
def get_file_list(job_path):
dir_list = os.listdir(job_path)
if not dir_list:
return dir_list
else:
# 使用lambda表达式,将文件按照最后修改时间顺序升序排列
# os.path.getmtime() 函数是获取文件最后修改时间
dir_list = sorted(dir_list,key=lambda x: os.path.getmtime(os.path.join(job_path, x)))
return dir_list
for dirname in os.listdir(jobs_path):
job_path = jobs_path + dirname + "\\builds\\"
if os.path.isdir(job_path):
print(job_path)
dir_list = get_file_list(job_path)
num = len(dir_list)
if num > 60:
for i in range(0, num-55):
log_path = job_path + "%s" % dir_list[i]
#print(log_path)
if os.path.isdir(log_path):
print("delete " + log_path)
shutil.rmtree(log_path)
else:
print("tag2, %s is not a path." % log_path)
else:
print("warning: dir<60")
else:
print("tag1, %s is not a path." % job_path)