Azure DevOps自托管代理提取任务时出现目录不为空错误如何解决
该错误是自托管Azure DevOps代理的高频偶发问题,核心原因是代理执行任务解压逻辑时,需要先清空目标目录再写入新解压的文件,若旧目录存在无法删除的残留文件/被进程锁定,就会抛出目录非空的IO异常。
排查步骤
- 确认代理运行账号对
C:\azagent\A1\_work\_tasks\目录有完全控制权限,排除权限不足导致的旧文件无法删除问题 - 检查故障发生时段是否有其他流水线任务同时在同一个代理节点运行,是否存在任务抢占对应CopyFiles任务目录的情况
- 检查代理节点的杀毒软件、终端安全防护策略,是否存在实时扫描锁定任务目录内文件导致删除失败的情况
- 查看故障发生前的流水线运行日志,确认上一次使用该版本CopyFiles任务的流水线是否异常中断,导致目录残留未清理
解决方案
临时修复方案
适用于偶发故障的快速恢复
- 登录故障代理节点,手动删除报错提示的目录:
C:\azagent\A1\_work\_tasks\CopyFiles_5bfb729a-a7c8-4a78-a7c3-8d717bb7c13c\2.190.1,重新触发流水线即可恢复 - 也可以直接重启对应代理的服务,触发代理启动时的自动目录清理逻辑
永久规避方案
- 在自托管代理的流水线定义开头添加自定义清理步骤,每次任务运行前清理
_tasks目录下对应任务版本的残留文件,操作时注意不要误删其他正在运行的任务目录 - 调整单代理节点的并发任务数为1,避免多任务抢占文件资源,若需要高并发能力可部署多个代理节点分别承接任务
- 将代理的工作目录添加到杀毒软件/安全防护的白名单,排除实时扫描对任务文件操作的影响
- 升级Azure DevOps代理到最新版本,新版本已优化任务解压前的目录清理重试逻辑,可大幅降低该问题的发生概率
内容的提问来源于stack exchange,提问作者Martin Nilsson
相关产品推荐
相关产品推荐

