如何在azure devops YAML管道中使用单个代理进行多个作业/阶段

5lwkijsr  于 2022-12-24  发布在  其他
关注(0)|答案(4)|浏览(186)

我正在处理Azure DevOps YAML管道,我不确定我们是否可以在整个管道中使用单个代理。我有多个作业/阶段-构建、部署、部署后,并希望将其分配给单个代理,因为它使用相同的工件。是否有办法通过管道分配单个代理?
先谢了。

plicqrtu

plicqrtu1#

我不希望代理每次都为新工作做结帐操作
使用checkout关键字配置或禁止此行为。

steps:
- checkout: none

你可以参考这份官方文件了解详情。

a9wyjsp7

a9wyjsp72#

是的,您可以在YAML上定义特定的代理。
例如:池:名称:代理池名称要求:-agent.name-等于座席名称
https://learn.microsoft.com/en-us/azure/devops/pipelines/process/demands?view=azure-devops&tabs=yaml

l0oc07j2

l0oc07j23#

如果你不能像@Savio Moreira建议的那样使用Specif代理,我发现唯一的选择就是重复一些步骤。
在我的情况下有一个类似的管道与2阶段:

  • 构建(确认PR)
  • Visual Studio内部版本
  • Visual Studio测试
  • VS检测
  • 发布(在合并到主页后发布对象)
  • Visual Studio内部版本
  • 复制文件
  • 发布生成项目

仅当使用YAML阶段和启用分支策略中的条件创建PR时,才会触发"生成"部件。仅当合并到主文档时,才会触发"发布"部件。
有些步骤需要重复,但执行是唯一的,这有点烦人,使用相同的管道,我可以在合并之前执行验证,然后在代码进入master后创建工件。
checkout选项没有帮助,因为在我的例子中,每个阶段都在完全不同的容器上执行。

xqnpmsa8

xqnpmsa84#

是的,有一种方法,所有你需要做的是存储你的第一份工作的代理名称在一个变量中,然后为任何其他工作,你需要要求相同的代理。

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)

相关问题