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

Jenkins限流构建生成多个自定义工作区,如何确保仅用单个工作区?

问题描述

我们已将构建任务配置为每个节点最多运行1个并发构建,并在节点代理配置中设置了customworkspace。但经过一段时间运行后,发现Jenkins工作区目录中生成了多个工作区,执行ls命令显示如下:

$ ls
bazel-workspace
bazel-workspace@2
bazel-workspace@tmp
bazel-workspace@2@tmp

请问是否存在其他可配置项,能够确保始终仅使用单个工作区?

当前配置信息

全局限流配置

全局配置中设置了每个节点的最大并发构建数为1。

Jenkinsfile配置

pipeline {
  agent {
    node {
      label 'bazel-worker'
      customWorkspace 'bazel-workspace'
    }
  }
  options {
    disableConcurrentBuilds(abortPrevious: !isMainline())
    throttleJobProperty(
        categories: ['bazel-build'],
        throttleEnabled: true,
        throttleOption: 'category'
    )
  }
}

流水线有效配置

流水线的有效配置中,已禁用并发构建,且启用了类别级别的限流策略。


解决方案与分析

出现带@2、@tmp后缀的多工作区,通常是Jenkins在处理构建中断、重试或临时文件操作时自动创建的——即便限制了单节点并发,仍可能因构建意外中止、插件隐式创建临时目录等场景触发。

要确保始终使用单个工作区,可通过以下配置实现:

1. 关闭临时目录清理行为

进入Jenkins全局配置(Manage Jenkins > Configure System),找到Workspace Cleanup相关设置,取消勾选“使用临时目录进行清理”(不同版本表述可能略有差异),强制清理操作直接在目标工作区内执行,避免生成@tmp后缀目录。

2. 添加工作区锁定策略

安装Workspace Lock Plugin,在流水线中添加工作区锁定配置,确保同一时间只有一个构建实例占用目标工作区:

pipeline {
  agent {
    node {
      label 'bazel-worker'
      customWorkspace 'bazel-workspace'
    }
  }
  options {
    disableConcurrentBuilds(abortPrevious: !isMainline())
    throttleJobProperty(
        categories: ['bazel-build'],
        throttleEnabled: true,
        throttleOption: 'category'
    )
    // 新增工作区锁定配置
    lock(resource: 'bazel-workspace-lock', inversePrecedence: true)
  }
}

该插件会锁定指定工作区资源,阻止任何并行的工作区创建操作。

3. 调整节点代理的工作区模式

进入节点代理配置页面(Manage Jenkins > Nodes > 目标节点 > Configure),找到Workspace Root Directory设置,选择“使用固定工作区”(而非默认的“唯一工作区”),确保该节点上的所有任务复用同一个指定工作区目录。

4. 添加构建后清理步骤

在流水线末尾添加工作区清理步骤,构建完成后自动清理临时文件,避免@tmp或@2目录残留积累:

pipeline {
  // 原有配置...
  post {
    always {
      cleanWs(deleteDirs: true, notFailBuild: true)
    }
  }
}

需提前安装Workspace Cleanup Plugin才能使用cleanWs步骤。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 18:25:31