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

Azure DevOps:如何防止agent phases结束后artifacts被删除?

解决Release Pipeline多Agent Phase切换时Artifacts被清空的问题

我之前也碰到过一模一样的情况!本质原因是每个Agent Phase(也就是咱们常说的Agent Job)默认会使用独立的临时工作目录,而且很多Agent配置会在Job结束后自动清理目录,导致之前下载好的Artifacts直接丢失。下面给你几个亲测有效的解决办法:

1. 把Artifacts存到Agent的全局共享目录

默认的$(System.DefaultWorkingDirectory)是每个Job专属的临时目录,Job跑完大概率会被清掉。你可以换个思路,把Artifacts下载到Agent机器上的全局共享路径:

  • 在下载Artifacts的任务里,把「下载路径」改成$(Agent.WorkFolder)/SharedTestArtifacts(这个路径是Agent的全局工作文件夹,所有Job都能访问到)
  • 后面所有Phase里的任务,都用这个固定路径去引用Artifacts,别再用默认的工作目录了

只要所有Phase都跑在同一台Agent上,就能直接复用已经下载好的文件,不用重复下载。

2. 关掉Agent Job的自动清理开关

你可以检查下Agent Job的设置,看看是不是开了自动清理:

  • 编辑对应的Agent Job,找到「高级」或者「附加选项」
  • 找到「清理」(Clean)这个选项,把它设为false(或者选「不清理工作目录」)
  • 这样Job结束后就不会删掉目录里的内容,后续Phase就能直接用之前的Artifacts了

⚠️ 注意:如果你的Pipeline会分配到不同的Agent机器上运行多个Phase,这个方法就没用了,毕竟不同机器的本地目录是完全独立的。

3. 强制所有Phase用同一台Agent

如果你的Agent池有多台机器,默认是随机分配的,这时候得让所有Phase都绑定到同一台Agent:

  • 编辑每个Agent Job的「需求」设置
  • 添加一个自定义需求,比如直接指定Agent的名称:Agent.Name -equals YourSpecificAgentName;或者给目标Agent加个自定义Capability(比如在Agent配置里加TestEnv -equals true),然后在Job需求里加上TestEnv -equals true
  • 这样所有Phase都会被分配到满足需求的那台Agent上,再结合上面的固定路径或者关闭清理选项,就能完美复用Artifacts了

特殊情况处理

如果你的Pipeline必须跨Agent运行(比如要测试不同环境),那本地复用Artifacts就行不通了。这时候可以把Artifacts发布到Pipeline的共享存储库,每个Phase都从共享库下载,虽然会多花点下载时间,但能保证每个Agent都拿到最新的Artifacts。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 05:36:42