CentOS Jenkins磁盘使用优化策略
针对Jenkins磁盘空间不足的紧急情况,可通过以下命令快速清理:
docker system prune -a --volumes --force,该命令会移除所有未使用的容器、网络、镜像及悬空卷,释放大量空间。/home/jenkins/jenkins_home),执行find . -type d -name "builds" -exec rm -rf {}/* \;,保留目录结构仅删除构建内容,避免误删配置。find /home/jenkins/jenkins_home -type f -name "*.log*" -size +100M -exec rm -f {} \;。明确空间占用来源是优化的前提,可使用以下工具:
ncdu(sudo yum install ncdu -y),执行ncdu /home/jenkins_jdk17,直观查看各目录占用比例,快速定位大文件。docker system df -v,查看镜像、容器、卷的存储占用情况。du -h --max-depth=1 /home/jenkins_jdk17/jenkins_home | sort -hr,按大小排序显示Jenkins主目录下各子目录占用,重点关注workspace(工作空间)、jobs(构建任务)目录。/home/jenkins_jdk17/jenkins_home/jobs/目录,执行find . -path "*/builds/*" -type d -mtime +7 -exec rm -rf {} \;,删除7天前的构建记录(保留最近一周)。find /home/jenkins_jdk17/jenkins_home/workspace/ -name "@tmp" -type d -mtime +1 -exec rm -rf {} \;,删除临时工作空间(@tmp目录),这些目录通常存放构建过程中的临时文件。/etc/docker/daemon.json),添加以下内容并重启Docker:{ "log-driver": "json-file", "log-opts": { "max-size": "10m", "max-file": "3" } } 该配置将容器日志限制为每个文件最大10MB,保留3个文件,防止日志占满磁盘。docker images -q -f dangling=true | xargs docker rmi,删除未被任何容器引用的悬空镜像,释放镜像存储空间。Disk Usage插件(实时监控Jenkins磁盘占用)、ThinBackup插件(增量备份与清理),通过插件界面查看空间使用趋势并触发清理。Manage Jenkins → System Configuration,找到“丢弃旧的构建”选项,配置Max # of builds to keep(保留最大构建次数,如10次)和Days to keep builds(保留天数,如7天),自动清理过期构建。/etc/cron.daily/jenkins_cleanup),内容如下:#!/bin/bash # 清理30天前的构建记录 find /home/jenkins_jdk17/jenkins_home/jobs/ -path "*/builds/*" -type d -mtime +30 -delete # 清理临时工作空间 find /home/jenkins_jdk17/jenkins_home/workspace/ -name "@tmp" -type d -mtime +1 -exec rm -rf {} \; # 清理Docker日志 find /var/lib/docker/containers/ -name "*.log" -size +50M -exec truncate -s 0 {} \; 脚本每日自动执行,定期清理过期数据。sudo lvextend -L +50G /dev/mapper/ubuntu--vg-home # 扩展逻辑卷 sudo resize2fs /dev/mapper/ubuntu--vg-home # 调整文件系统大小 扩展后无需重启服务器,立即生效。sudo systemctl stop jenkins),将数据目录迁移至大容量磁盘(如/new/storage):rsync -avz /home/jenkins_jdk17 /new/storage/ # 同步数据 sudo ln -sf /new/storage/jenkins_jdk17 /home/jenkins_jdk17 # 创建软链接 sudo systemctl start jenkins # 启动服务 迁移后,Jenkins仍通过原路径访问数据,无需修改配置。配置Prometheus告警规则,当Jenkins存储使用率超过阈值(如10%)时触发告警,示例规则如下:
- alert: JenkinsLowDiskSpace expr: (node_filesystem_avail_bytes{mountpoint="/home/jenkins_jdk17"} / node_filesystem_size_bytes{mountpoint="/home/jenkins_jdk17"}) * 100 < 10 for: 15m labels: severity: critical annotations: summary: "Jenkins存储空间不足 (实例 {{ $labels.instance }})" description: "挂载点 /home/jenkins_jdk17 剩余空间仅剩 {{ printf \"%.2f\" (100 - (node_filesystem_avail_bytes{mountpoint=\"/home/jenkins_jdk17\"} / node_filesystem_size_bytes{mountpoint=\"/home/jenkins_jdk17\"}) * 100) }}%" 告警可通过邮件、钉钉等方式发送,及时提醒管理员处理。