用Python脚本清理Jenkins目录下jobs日志记录

问题描述:

备份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)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值