有没有办法强制对阶段内的所有作业使用相同的代理目录?

Dan*_*Dan 5 azure-devops azure-pipelines azure-pipelines-yaml

所以我正在设置一个新的构建管道,它非常复杂,它是多阶段的,并且阶段内有多项作业。

但我遇到了问题,因为当我尝试依靠在同一代理工作文件夹中执行的一个阶段的第二个和第三个作业来保存某些任务时。当然,这实际上并不起作用。它实际上有时有效,但有时无效。我希望不同的作业总是在与之前的作业相同的文件夹中运行,或者从不运行,但有时不会。

无论如何,所以我想知道是否有一种方法可以将整个阶段或管道限制到单个工作目录。有人有什么想法吗?谢谢!!!

Rit*_*sra 5

这是一个很老的问题,但我仍然想回答,以防它对其他人有帮助。是的,有一种方法,您需要做的就是将第一份工作的代理名称存储在变量中,然后对于任何其他工作,您需要请求相同的代理。它是这样完成的——

 jobs:
- job: A
  steps:
  - bash: |
     echo "##vso[task.setvariable variable=AgentName;isoutput=true]$(Agent.Name)"
    name: passOutput
- job: B
  dependsOn: A
  variables:
    AgentName: $[ dependencies.A.outputs['passOutput.AgentName'] ]  
  pool:
    name: pool1
    demands: Agent.Name -equals $(Agent.Name)   
  steps:
  - bash: |
     echo $(AgentName)
Run Code Online (Sandbox Code Playgroud)

对我来说就像魅力一样。


Vin*_*ren 3

有没有办法将整个阶段或管道限制到单个工作目录

不,没有。代理可以选择其工作目录的哪个子目录用作任何给定作业的工作空间,这是不可控的。

此外,依赖于每个作业使用相同的工作空间假设每个作业使用相同的代理,这不是作业和代理的设计工作方式。假定每个作业在逻辑上是独立的,并且能够在(来自池中)可用的任何代理上运行。

除非池中只有一个代理满足要求,否则不能保证后续作业将使用与先前作业相同的代理。