You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何清理Jenkins控制节点中的工作空间?

清理Jenkins控制器工作空间的优化方案

你的核心问题在于:定时删除旧工作空间后,多分支流水线扫描会重新拉取已删除的PR/分支工作空间,导致控制器磁盘被占满。这是因为多分支扫描时会校验分支工作空间的存在性,不存在则自动拉取。以下是针对性的解决方法:

1. 优化多分支流水线的分支保留策略

直接从根源减少不必要的工作空间生成:

  • 在多分支流水线的配置页面,找到Discard old items选项,设置:
    • 保留的分支/PR数量上限(比如仅保留最近10个活跃PR)
    • 保留时长(比如超过7天的废弃分支自动清理)
      这样被标记为废弃的分支/PR会被Jenkins自动移除,扫描时不会再重新拉取它们的工作空间。
  • 在Branch Sources的源码管理配置中,启用工作空间保留规则,比如设置“仅保留当前活跃分支的工作空间”,或者空闲超时(如3天无活动)自动清理工作空间。

2. 改进定时清理脚本,只删除废弃分支的工作空间

不要盲目删除所有旧目录,而是只清理那些已经被Jenkins标记为废弃的分支对应的工作空间:

# 替换为你的多分支流水线名称
MULTIBRANCH_JOB="your-multibranch-job"

# 获取当前Jenkins中仍存在的分支列表
ACTIVE_BRANCHES=$(ls /var/lib/jenkins/jobs/$MULTIBRANCH_JOB/branches/ | sed 's/\/$//')

# 遍历工作空间目录,删除不在活跃分支列表且超过2天的目录
find /var/lib/jenkins/workspace/$MULTIBRANCH_JOB-* -maxdepth 0 -type d -mtime +2 | while read WORKSPACE_DIR; do
    # 从工作空间目录名中提取分支名称
    BRANCH_NAME=$(basename "$WORKSPACE_DIR" | sed "s/^$MULTIBRANCH_JOB-//")
    # 检查分支是否仍活跃,非活跃则删除
    if ! echo "$ACTIVE_BRANCHES" | grep -q "^$BRANCH_NAME$"; then
        sudo rm -rf "$WORKSPACE_DIR"
    fi
done

注意:默认工作空间命名格式为[多分支job名]-[分支名],如果你的Jenkins工作空间命名规则不同,需要调整脚本中的分支名称提取逻辑。

3. 利用Workspace Cleanup插件清理控制器工作空间

其实Workspace Cleanup插件支持清理控制器(master节点)的工作空间,只要你的任务是在master节点上运行的。可以在流水线中添加清理步骤,在任务结束后自动清理当前工作空间:

pipeline {
    agent { label 'master' } // 指定任务在控制器节点运行
    stages {
        stage('Build') {
            steps {
                // 你的构建/执行步骤
            }
        }
    }
    post {
        always {
            cleanWs() // 无论任务成功失败,都清理当前工作空间
        }
    }
}

内容的提问来源于stack exchange,提问作者Justas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 07:03:41