azure管道“命令行”代理作业是否继承了先前作业的工作目录?

时间:2019-09-28 06:11:59

标签: windows azure-pipelines

我对Azure管道代理工作的理解是:

  1. 每项工作都是独立的
  2. 每个“命令行”作业都在具有独立范围的自己的上下文中运行。

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

2 个答案:

答案 0 :(得分:0)

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

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

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

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

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

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

答案 1 :(得分:0)

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

在第二个命令任务中,我只是转到文件夹,然后尝试读取.txt文件。 enter image description here

最后,第二个任务失败,并显示错误消息。 enter image description here

如果我在第一个任务中设置了工作目录,而不在第二个任务中设置了工作目录。这两个任务的工作目录不同。 enter image description here