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

Jenkins ws-cleanup无法删除Windows工作区:文件锁定问题咨询

Jenkins Windows代理工作区清理失败问题解决方案

问题背景

在Windows Jenkins代理/控制器上运行流水线时,构建后清理阶段使用ws-cleanup插件时常无法删除工作区(路径:C:\build\ci\Jenkins\workspace\example-project),推测是有进程锁定了工作区内文件。流水线涉及Maven、MSBuild、NuGet、Java、Node.js及PowerShell脚本,报错信息如下:

[WS-CLEANUP] Deleting project workspace...
[WS-CLEANUP] Deferred wipeout is used...
ERROR: Cannot delete workspace :Unable to delete 'C:\build\ci\Jenkins\workspace\example-project'.
Tried 3 times (of a maximum of 3) waiting 0.1 sec between attempts.
(Discarded 44 additional exceptions) Cannot delete workspace:
Unable to delete 'C:\build\ci\Jenkins\workspace\example-project'.
Tried 3 times (of a maximum of 3)
waiting 0.1 sec between attempts. (Discarded 44 additional exceptions)


1. 定位锁定工作区进程的最佳方法

  • Windows内置工具排查:
    • 用Sysinternals Suite的handle.exe:下载后在命令行执行 handle.exe C:\build\ci\Jenkins\workspace\example-project,直接列出锁定该路径文件的进程ID和名称。
    • 用资源监视器:打开后切换到「CPU」标签,在「关联的句柄」搜索框输入工作区路径,即可找到锁定文件的进程。
  • 流水线内添加诊断步骤:
    在清理阶段前插入PowerShell脚本,调用handle.exe记录锁定进程:
    & "C:\tools\Sysinternals\handle.exe" "C:\build\ci\Jenkins\workspace\example-project" >> workspace-lock-log.txt
    
    保留日志用于后续排查。

2. 避免该问题的Jenkins流水线模式

  • 显式终止残留进程:
    在清理步骤前添加PowerShell脚本,终止流水线用到的工具进程:
    # 终止Java、Node.js、MSBuild等相关进程
    Get-Process -Name java, node, MSBuild, mvn -ErrorAction SilentlyContinue | Stop-Process -Force
    
    可根据实际使用的工具调整进程名称。
  • 使用独立临时工作区:
    配置流水线每个构建使用专属临时目录,避免共享工作区的清理冲突:
    agent {
      node {
        label 'windows-agent'
        customWorkspace "C:\build\ci\Jenkins\temp-workspace\${BUILD_ID}"
      }
    }
    
    即使清理失败,也不会影响后续构建。
  • 调整清理重试策略:
    给ws-cleanup插件增加重试次数和间隔,给进程足够时间释放文件锁:
    cleanWs(
        deleteDirs: true,
        retryCount: 5,
        retryWaitTime: 2000  # 间隔2秒重试
    )
    
  • 确保工具正常退出:
    流水线中调用Maven、MSBuild等工具时,使用bat或powershell步骤直接执行,避免后台启动进程未被捕获(比如用bat "mvn clean install"而非后台执行命令)。

3. 杀毒/EDR工具的相关已知情况

是的,杀毒软件或EDR工具是这类问题的常见诱因:

  • 实时扫描功能会在文件修改后立即锁定文件进行查杀,此时Jenkins尝试删除文件会被阻止。
  • 部分EDR工具会监控Jenkins相关进程的文件操作,误判为可疑行为而锁定工作区文件。
  • 解决方式:将Jenkins工作区路径添加到杀毒/EDR工具的排除列表,关闭该路径的实时扫描或行为监控。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 14:30:39