如何在Ubuntu上优化Jenkins的存储空间
导读:Ubuntu上Jenkins存储空间优化实操指南 一 定位大目录与根因 查看整体磁盘使用: 命令:df -h、sudo du -h --max-depth=1 /var/lib/jenkins | sort -hr | head 定...
Ubuntu上Jenkins存储空间优化实操指南
一 定位大目录与根因
- 查看整体磁盘使用:
- 命令:
df -h、sudo du -h --max-depth=1 /var/lib/jenkins | sort -hr | head
- 命令:
- 定位Jenkins主要占用:
- 构建历史与日志:/var/lib/jenkins/jobs/(每个Job的builds目录、日志与产物)
- 工作区:/var/lib/jenkins/workspace/(构建过程文件,Jenkins不会自动清理)
- 若使用Docker运行Jenkins:检查容器层与卷占用,尤其是overlay2目录
- 快速判断思路:若磁盘告警且
jobs或workspace占用异常高,优先从“历史构建保留策略”和“工作区残留”入手。
二 配置构建保留策略与定期清理
- 全局策略(推荐):安装Workspace Cleanup插件,在Manage Jenkins → Configure System中启用“Build Discarder”或在“Cloud/Advanced”为所有Job设置统一的丢弃规则,例如:
- 保留构建天数:7
- 保留构建个数:20
- 勾选“Delete build records”(如不需要保留历史记录)
- 按Job配置:在Job配置页“Post-build Actions”添加“Delete workspace when build ends”或“Workspace Cleanup”,确保每次构建后自动清理工作区临时文件与报告。
- 典型收益:某iOS任务每次构建约100MB、保留50次,占用约5.7GB;将策略调整为“3天/20次”后,可显著下降占用并避免再次告警。
三 清理残留工作区与历史构建
- 清理已删除Job的残留工作区(Master与所有Agent均需执行):
- 思路:遍历各节点workspace目录,若对应Job已不存在则删除该目录。
- 示例脚本(Python,需安装
jenkinsapi):import os, shutil, logging from jenkinsapi.jenkins import Jenkins logging.basicConfig(level=logging.INFO) logger = logging.getLogger(__file__) def get_jenkins_instance(): jenkins_url = "http://your-jenkins-url" username = "admin" password = "api_token_or_password" return Jenkins(jenkins_url, username=username, password=password) def cleanup_orphaned_workspaces(jenkins, jenkins_home): ws_root = os.path.join(jenkins_home, "workspace") if not os.path.isdir(ws_root): return existing_jobs = set(j.name for j in jenkins.jobs) for name in os.listdir(ws_root): job_ws = os.path.join(ws_root, name) if os.path.isdir(job_ws) and name not in existing_jobs: logger.info("Removing orphaned workspace: %s", job_ws) shutil.rmtree(job_ws) if __name__ == "__main__": jenkins = get_jenkins_instance() cleanup_orphaned_workspaces(jenkins, "/var/lib/jenkins") - 建议以“系统任务”方式在Master与每个Agent上定期运行,避免误删自定义工作区。
- 手动清理历史构建(紧急情况):
- 进入**/var/lib/jenkins/jobs//builds**,按时间或数量删除旧目录(谨慎操作,建议先备份)。
四 迁移JENKINS_HOME到更大磁盘
- 正确做法(避免“换目录不换分区”的误区):
- 准备新磁盘或分区(如挂载到**/data**)
- 停止Jenkins:
sudo systemctl stop jenkins - 同步数据:
sudo rsync -avz /var/lib/jenkins/ /data/jenkins/ - 备份旧目录:
sudo mv /var/lib/jenkins /var/lib/jenkins.bak - 挂载新分区到Jenkins目录:
- 编辑
/etc/fstab添加:/dev/sdX1 /var/lib/jenkins ext4 defaults 0 2 - 挂载:
sudo mount -a
- 编辑
- 启动Jenkins:
sudo systemctl start jenkins - 验证:
df -h /var/lib/jenkins与ls /var/lib/jenkins确认空间与数据无误
- 注意:仅修改
JENKINS_HOME环境变量到新路径而不迁移数据或更换挂载点,并不会增加可用空间。
五 容器与系统层面的优化
- Docker运行Jenkins:
- 定期清理无用镜像/容器/卷:
docker system prune -af --volumes - 检查容器层占用:
docker ps -s,对大体积层进行镜像瘦身或分层优化 - 若使用Docker-in-Docker,确保**/var/lib/docker**所在分区容量充足
- 定期清理无用镜像/容器/卷:
- 系统与JVM:
- 限制构建并发数,减轻磁盘与I/O压力
- 配置JVM堆大小(如在
/etc/default/jenkins中设置JAVA_ARGS="-Xmx4096m"),避免频繁Full GC带来的额外I/O - 配置日志级别与保留策略,避免日志无限增长。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: 如何在Ubuntu上优化Jenkins的存储空间
本文地址: https://pptw.com/jishu/749145.html
