Azure devops Azure DevOps多阶段工作包在每个阶段后得到清理

Azure devops Azure DevOps多阶段工作包在每个阶段后得到清理,azure-devops,Azure Devops,我们的构建在Azure DevOps中运行,使用Yaml文件和多阶段模板。我观察到,在每个阶段之后,管道工作区都会被删除,而依赖于工作区中存在的文件的下一个阶段会失败 多阶段工作包在每个阶段后进行清洁 正如但以理所说,是的,这是故意的 正如我们设计的那样,对于azure devops管道,存在一个代理作业。也就是说,每个代理作业都有一个单独的工作空间: 运行代理池作业时,它会在代理上创建一个工作区。 工作区是一个目录,它在其中下载源代码并运行 步骤,并生成输出 如果注意不同代理作业使用的托管代理

我们的构建在Azure DevOps中运行,使用Yaml文件和多阶段模板。我观察到,在每个阶段之后,管道工作区都会被删除,而依赖于工作区中存在的文件的下一个阶段会失败

多阶段工作包在每个阶段后进行清洁

正如但以理所说,是的,这是故意的

正如我们设计的那样,对于azure devops管道,存在一个
代理作业
。也就是说,每个代理作业都有一个单独的工作空间:

运行代理池作业时,它会在代理上创建一个工作区。 工作区是一个目录,它在其中下载源代码并运行 步骤,并生成输出

如果注意不同代理作业使用的托管代理,您会发现在一个代理作业完成后,下一个将使用另一个新代理。这是我上述言论最明显的表现

如果您使用的是private agent,那么此时可以保留上一个agent作业的工作区缓存(如文件、二进制文件等),直到您清除它们为止。但是,您不能通过一些预定义变量调用它们,例如
Build.SourcesDirectory


在您的场景中,您说过下一个阶段与上一个阶段具有文件依赖关系


为了避免此默认限制引起的问题,您可以使用
发布工件
,以及
下载工件
。这种方式可以帮助您在阶段之间传递文件

是的,没错。这种行为是故意的。每项工作应独立于以前的工作;jobs可以在不同的代理上运行。感谢Daniel的解释感谢Merlin的详细解释现在我们将添加发布和下载工件的方法