如何通过在Ubuntu上优化Jenkins存储空间,实现工作效率的显著提升?

更新于
2026-08-12 11:26:41
5阅读来源:SEO教程
  • 内容介绍
  • 文章标签
  • 相关推荐

一、定位大目录与根因

痛点:硬盘空间告急。建立经常因为 no space left on device 而失败,排查时找不到真正的占用者。

需要找出 Jenkins 中占用磁盘最多的目录。老实说,常见的高占用方法包括:

如何通过在Ubuntu上优化Jenkins存储空间,实现工作效率的显著提升?
  • /var/lib/jenkins/jobs/*/builds —— 每个建立产生的工作区和产物。
  • /var/lib/jenkins/workspace —— 手动保留下来的临时文件。
  • /var/lib/jenkins/plugins —— 旧插件未及时清理。

使用以下命令快速定位前五大目录:

du -h /var/lib/jenkins | sort -hr | head -n 5

二、建立保留策略与自动清理

痛点:手动删除历史建立费时费力,误删自定义工作区导致业务中断。

1. 配置 Job 的“建立丢弃策略”

在每个 Job → “配置” → “建立丢弃策略”中设定:

  • 保留最近 N 次建立
  • 或保留最近 X 天内的建立
  • 同时保留标记为“Release”的关键建立

2. 使用程序任务实现全局清理

创建一个 “程序任务” 并勾选 “定期执行”。再看脚本示例,

# 删除超过 30 天且未被标记的旧工作区
find /var/lib/jenkins/jobs/*/builds -mindepth 1 -maxdepth 1 -type d -mtime +30 -exec rm -rf {} \;# 清理空工作区
find /var/lib/jenkins/workspace -type d -empty -delete

三、迁移 JENKINS_HOME 到更大磁盘

痛点:根分区已满。无法再写入新数据,升级硬件成本高。

1. 准备新磁盘并挂载

# 假设新磁盘已挂载到 /mnt/bigdisk
sudo mkdir -p /mnt/bigdisk/jenkins_home
sudo chown -R jenkins:jenkins /mnt/bigdisk/jenkins_home

2. 停止 Jenkins 并拷贝数据

# 关闭服务
sudo systemctl stop jenkins
# 同步数据
sudo rsync -avz /var/lib/jenkins/ /mnt/bigdisk/jenkins_home/
# 修改环境变量
sudo sed -i 's|JENKINS_HOME=.*|JENKINS_HOME=/mnt/bigdisk/jenkins_home|' /etc/default/jenkins
# 开启服务
sudo systemctl start jenkins

四、日志轮转 & 高性能存储

痛点:日志文件无限增长,占满数十 GB 硬盘空间; 读取大量文件时响应慢,

1. 配置 logrotate

/etc/logrotate.d/jenkins:
/var/log/jenkins/*.log {
weekly
rotate 4
compress
missingok
notifempty
copytruncate
}

2. 使用 SSD 替代 HDD

SATA SSD 或 NVMe SSD 能将 I/O 延迟从数毫秒降至 <0.1 ms,尤其在大量源码检出和制品上传时效果明显。

五、容器 & 程序层面的综合调整

痛点:Kubernetes/Docker 部署的 Jenkins 容器频繁 OOM,资源利用率低下。其实,

1. 合理分配 CPU & Memory

  • Kubernetes:在 Deployment 中设置 ,.
  • 从Docker来看。使用 -m 4g --cpus=2.

2. 增加 swap 与 vm.swappiness

# 创建 8G swap 文件
sudo fallocate -l 8G /swapfile && sudo chmod 600 /swapfile && sudo mkswap /swapfile && sudo swapon /swapfile
# 调整 swappiness 为 10
sudo sysctl vm.swappiness=10
echo 'vm.swappiness=10' | sudo tee -a /etc/sysctl.conf

3. 调整 SCM 检出

  • Sparse checkout,只检出需要的子目录。
  • Caching:在 Jenkins 节点上启用 Git 本地缓存,减少网络拉取时间。
  • Pipelines 中使用 @Library,避免重复拉取同一仓库。

4. 定期审计插件

PJ 插件是磁盘和内存的大消耗源。每季度运行一次插件审计脚本,卸载不再使用或已被官方废弃的插件。

痛点:A/B 调整后缺乏可视化数据,不确定是否真的提高了效率。

如何通过在Ubuntu上优化Jenkins存储空间,实现工作效率的显著提升?
  • `df -h` 检查磁盘余量:
  • # 示例输出
    Filesystem Size Used Avail Use% Mounted on
    /dev/sda1 50G 20G 28G 42% /
    /dev/sdb1 200G 30G 160G 16% /mnt/bigdisk
    
  • `top` 或 `htop` 查看 CPU/MEM 占用情况; 结合 Jenkins 自带监控插件绘制趋势图。 不过,
  • `curl http://localhost:8080/api/json?pretty` 获取当前队列长度,判断是否出现阻塞。其实,

标签:Ubuntu

一、定位大目录与根因

痛点:硬盘空间告急。建立经常因为 no space left on device 而失败,排查时找不到真正的占用者。

需要找出 Jenkins 中占用磁盘最多的目录。老实说,常见的高占用方法包括:

如何通过在Ubuntu上优化Jenkins存储空间,实现工作效率的显著提升?
  • /var/lib/jenkins/jobs/*/builds —— 每个建立产生的工作区和产物。
  • /var/lib/jenkins/workspace —— 手动保留下来的临时文件。
  • /var/lib/jenkins/plugins —— 旧插件未及时清理。

使用以下命令快速定位前五大目录:

du -h /var/lib/jenkins | sort -hr | head -n 5

二、建立保留策略与自动清理

痛点:手动删除历史建立费时费力,误删自定义工作区导致业务中断。

1. 配置 Job 的“建立丢弃策略”

在每个 Job → “配置” → “建立丢弃策略”中设定:

  • 保留最近 N 次建立
  • 或保留最近 X 天内的建立
  • 同时保留标记为“Release”的关键建立

2. 使用程序任务实现全局清理

创建一个 “程序任务” 并勾选 “定期执行”。再看脚本示例,

# 删除超过 30 天且未被标记的旧工作区
find /var/lib/jenkins/jobs/*/builds -mindepth 1 -maxdepth 1 -type d -mtime +30 -exec rm -rf {} \;# 清理空工作区
find /var/lib/jenkins/workspace -type d -empty -delete

三、迁移 JENKINS_HOME 到更大磁盘

痛点:根分区已满。无法再写入新数据,升级硬件成本高。

1. 准备新磁盘并挂载

# 假设新磁盘已挂载到 /mnt/bigdisk
sudo mkdir -p /mnt/bigdisk/jenkins_home
sudo chown -R jenkins:jenkins /mnt/bigdisk/jenkins_home

2. 停止 Jenkins 并拷贝数据

# 关闭服务
sudo systemctl stop jenkins
# 同步数据
sudo rsync -avz /var/lib/jenkins/ /mnt/bigdisk/jenkins_home/
# 修改环境变量
sudo sed -i 's|JENKINS_HOME=.*|JENKINS_HOME=/mnt/bigdisk/jenkins_home|' /etc/default/jenkins
# 开启服务
sudo systemctl start jenkins

四、日志轮转 & 高性能存储

痛点:日志文件无限增长,占满数十 GB 硬盘空间; 读取大量文件时响应慢,

1. 配置 logrotate

/etc/logrotate.d/jenkins:
/var/log/jenkins/*.log {
weekly
rotate 4
compress
missingok
notifempty
copytruncate
}

2. 使用 SSD 替代 HDD

SATA SSD 或 NVMe SSD 能将 I/O 延迟从数毫秒降至 <0.1 ms,尤其在大量源码检出和制品上传时效果明显。

五、容器 & 程序层面的综合调整

痛点:Kubernetes/Docker 部署的 Jenkins 容器频繁 OOM,资源利用率低下。其实,

1. 合理分配 CPU & Memory

  • Kubernetes:在 Deployment 中设置 ,.
  • 从Docker来看。使用 -m 4g --cpus=2.

2. 增加 swap 与 vm.swappiness

# 创建 8G swap 文件
sudo fallocate -l 8G /swapfile && sudo chmod 600 /swapfile && sudo mkswap /swapfile && sudo swapon /swapfile
# 调整 swappiness 为 10
sudo sysctl vm.swappiness=10
echo 'vm.swappiness=10' | sudo tee -a /etc/sysctl.conf

3. 调整 SCM 检出

  • Sparse checkout,只检出需要的子目录。
  • Caching:在 Jenkins 节点上启用 Git 本地缓存,减少网络拉取时间。
  • Pipelines 中使用 @Library,避免重复拉取同一仓库。

4. 定期审计插件

PJ 插件是磁盘和内存的大消耗源。每季度运行一次插件审计脚本,卸载不再使用或已被官方废弃的插件。

痛点:A/B 调整后缺乏可视化数据,不确定是否真的提高了效率。

如何通过在Ubuntu上优化Jenkins存储空间,实现工作效率的显著提升?
  • `df -h` 检查磁盘余量:
  • # 示例输出
    Filesystem Size Used Avail Use% Mounted on
    /dev/sda1 50G 20G 28G 42% /
    /dev/sdb1 200G 30G 160G 16% /mnt/bigdisk
    
  • `top` 或 `htop` 查看 CPU/MEM 占用情况; 结合 Jenkins 自带监控插件绘制趋势图。 不过,
  • `curl http://localhost:8080/api/json?pretty` 获取当前队列长度,判断是否出现阻塞。其实,

标签:Ubuntu