首页主机资讯如何在Ubuntu上优化Jenkins的存储空间

如何在Ubuntu上优化Jenkins的存储空间

时间2025-11-17 17:53:04发布访客分类主机资讯浏览1443
导读:Ubuntu上Jenkins存储空间优化实操指南 一 定位大目录与根因 查看整体磁盘使用: 命令:df -h、sudo du -h --max-depth=1 /var/lib/jenkins | sort -hr | head 定...

Ubuntu上Jenkins存储空间优化实操指南

一 定位大目录与根因

  • 查看整体磁盘使用:
    • 命令:df -hsudo 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目录
  • 快速判断思路:若磁盘告警且jobsworkspace占用异常高,优先从“历史构建保留策略”和“工作区残留”入手。

二 配置构建保留策略与定期清理

  • 全局策略(推荐):安装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到更大磁盘

  • 正确做法(避免“换目录不换分区”的误区):
    1. 准备新磁盘或分区(如挂载到**/data**)
    2. 停止Jenkins:sudo systemctl stop jenkins
    3. 同步数据:sudo rsync -avz /var/lib/jenkins/ /data/jenkins/
    4. 备份旧目录:sudo mv /var/lib/jenkins /var/lib/jenkins.bak
    5. 挂载新分区到Jenkins目录:
      • 编辑/etc/fstab添加:/dev/sdX1 /var/lib/jenkins ext4 defaults 0 2
      • 挂载:sudo mount -a
    6. 启动Jenkins:sudo systemctl start jenkins
    7. 验证:df -h /var/lib/jenkinsls /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
Ubuntu Jenkins如何实现多任务并行处理 ubuntu虚拟机硬盘怎么扩容

游客 回复需填写必要信息