Windows azure管道';命令行';代理作业是否从上一个作业继承工作目录?

Windows azure管道';命令行';代理作业是否从上一个作业继承工作目录?,windows,azure-pipelines,Windows,Azure Pipelines,我对azure管道代理作业的理解是: 每项工作都是独立的 每个“命令行”作业都在其各自的上下文中运行,并具有独立的作用域 但是,如果未设置azure管道“命令行”的工作目录,则默认为以前“命令行”代理作业中的工作目录。在回答问题之前,我希望确保术语清楚: 管道是ci cd流程的总体定义,它们可以包含多个阶段 阶段是管道的各个阶段,如构建、测试、部署。。。它们可以包含多个作业 作业是实现流程所需的任务/步骤的集合。它们包含一个或多个任务/步骤 任务或步骤是正在执行的实际操作,如“执行此命令”“构

我对azure管道代理作业的理解是:

  • 每项工作都是独立的
  • 每个“命令行”作业都在其各自的上下文中运行,并具有独立的作用域

  • 但是,如果未设置azure管道“命令行”的工作目录,则默认为以前“命令行”代理作业中的工作目录。

    在回答问题之前,我希望确保术语清楚:

    • 管道是ci cd流程的总体定义,它们可以包含多个阶段

    • 阶段是管道的各个阶段,如构建、测试、部署。。。它们可以包含多个作业

    • 作业是实现流程所需的任务/步骤的集合。它们包含一个或多个任务/步骤

    • 任务或步骤是正在执行的实际操作,如“执行此命令”“构建该dotnet项目”

    在每个作业之间重置环境(意味着将使用新的虚拟机,再次拉取源等)。在属于同一作业的每个任务或步骤之间,您将保持相同的环境,并且每个任务将从以前的任务中“受益”结果(文件更改、环境变量…。
    就工作目录而言,它们都默认为build.workingDirectory(请参阅azure devops默认变量)。
    如果将一个任务的工作目录设置为其他任务,则不会影响其他任务。

    如果使用Microsoft hosted agent,则每次运行管道时,都会得到一个新的虚拟机。虚拟机在使用一次后被丢弃。每个作业可能使用不同的代理,您不应假设在后续作业期间,先前作业的状态可用。 下面是一个简单的测试。 我在管道中创建了两个代理作业,添加命令任务并逐个运行代理作业。在第一个命令任务中,我在$(Agent.BuildDirectory)文件夹中创建一个.txt文件,然后读取它。

    在第二个命令任务中,我只是切换到文件夹并尝试读取.txt文件。

    最后,第二个任务失败,并向我显示错误消息。

    若我在第一个任务中设置了工作目录,而并没有在第二个任务中设置它。这两个任务的工作目录不同。