Jenkins磁盘空间自动清理

背景介绍

Jenkins作为一款广泛应用于自动化构建、测试与部署的强大工具,在长时间运作后,其服务器上积累了大量的构建历史、工作空间、日志文件以及其他临时数据。每次构建都会生成一系列的工作产物,随着时间的推移,这些数据逐渐占据了大量的磁盘空间,尤其在频繁构建和长期运行的项目中更为明显。

Jenkins的磁盘清理的内容主要包括两大块,一是构建记录(Build Artifacts),二是工作空间(workspace)。这两部分是占用磁盘空间最多的目录。清理空间的方式也是多种多样,可以通过登陆到Jenkins控制台,进入到每个Job的配置页面,选择删除旧的构建和Artifact,也可以通过安装插机,例如Workspace Cleanup Plugin,在构建后自动清理工作空间,还可以通过脚本的方式自定义脚本的方式按照特定天数删除旧构建。本文我们介绍的是通过自定义脚本的方式,保留特定天数的构建记录。

实现步骤

  1. 编写脚本,该脚本实现逻辑主要是通过判断目录的最新时间,保留近一个月的构建记录,超过一个月的就自动删除,通过find命令定义需要清理的项目目录,如下:

    #!/bin/bash

    #jenkins 构建项目目录
    DIR="/home/user/.jenkins/jobs/"

    #保留天数
    OLDEST_DATE=(date -d "(date +%Y-%m-%d) -30 days" +%s)

    #添加项目 "Product" 和 "Dev"
    for DIRECTORY in (find "DIR" -maxdepth 1 -type d -name "Product" -o -name "Dev" | sort); do
    if [ -d "DIRECTORY/builds" ]; then echo "Processing DIRECTORY/builds directory..."
    find "DIRECTORY/builds" -maxdepth 1 -type d -name "[0-9]*" | while read LINE do MOD_DATE=(stat -c %Y "LINE") if [[ MOD_DATE -lt $OLDEST_DATE ]]; then

    复制代码
         echo "Deleting old directory ${LINE}"
         ls -ld ${LINE}
         rm -rf "${LINE}"
       fi
     done

    else
    echo "Skipping $DIRECTORY/builds directory..."
    fi
    done

  2. 添加定时任务

    #crontab -e
    0 23 * * * /root/script/Jenkins_disk_clenup.sh > /dev/null 2>&1 &

知识扩展

Jenkins目录结构
  1. config.xml:Jenkins根配置文件,包含全局配置信息。

  2. jobs目录:存储各个构建作业(Job)的配置和状态信息,每个job在该目录下都有一个子目录(项目构建的名称)。

  • <job_name>/config.xml:存储该job的配置详情。

  • <job_name>/builds/:每个构建编号下有构建结果和相关的工件(artifacts)。

  1. workspace/<job_name>:存储每个job的工作空间,当Jenkins执行构建时,会在此处下载源代码并执行构建过程。

  2. plugins目录:存放已安装的Jenkins插件及其相关数据。

  3. logs目录:存放Jenkins和各个插件的日志文件。

  4. userContent目录:放置可供HTTP访问的静态文件。

  5. nodes目录:在分布式环境中,用于存储节点(agent)的配置信息。

  6. credentials.xml:存储凭证信息,如访问Git仓库或其他服务所需的认证凭据。

相关推荐
Coder码匠1 小时前
Dockerfile 优化实践:从 400MB 到 80MB
java·spring boot
李慕婉学姐8 小时前
【开题答辩过程】以《基于JAVA的校园即时配送系统的设计与实现》为例,不知道这个选题怎么做的,不知道这个选题怎么开题答辩的可以进来看看
java·开发语言·数据库
奋进的芋圆10 小时前
Java 延时任务实现方案详解(适用于 Spring Boot 3)
java·spring boot·redis·rabbitmq
sxlishaobin10 小时前
设计模式之桥接模式
java·设计模式·桥接模式
model200510 小时前
alibaba linux3 系统盘网站迁移数据盘
java·服务器·前端
荒诞硬汉10 小时前
JavaBean相关补充
java·开发语言
提笔忘字的帝国11 小时前
【教程】macOS 如何完全卸载 Java 开发环境
java·开发语言·macos
2501_9418824811 小时前
从灰度发布到流量切分的互联网工程语法控制与多语言实现实践思路随笔分享
java·开发语言
華勳全栈11 小时前
两天开发完成智能体平台
java·spring·go
alonewolf_9911 小时前
Spring MVC重点功能底层源码深度解析
java·spring·mvc