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

问题描述 投票:0回答:5

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

提前致谢。

azure tfs azure-devops yaml azure-pipelines
5个回答
7
投票

我不想让代理每次新工作都做结帐操作

使用 checkout 关键字来配置或抑制此行为。

steps:
- checkout: none

详情可以参考这个官方文档


4
投票

是的,您可以在 YAML 上定义特定代理。

例如: 水池: 名称:代理池名称 需要: - agent.name -等于 AgentName

https://learn.microsoft.com/en-us/azure/devops/pipelines/process/demands?view=azure-devops&tabs=yaml


4
投票

是的,有一种方法,您需要做的就是将第一份工作的代理名称存储在变量中,然后对于任何其他工作,您需要请求相同的代理。就这样完成了-

 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 $(AgentName)   
  steps:
  - bash: |
     echo $(AgentName)

1
投票

如果您无法使用特定代理,如@Savio Moreira 建议的那样,我发现的唯一选择是重复一些步骤。

在我的例子中,有一个类似的两阶段管道:

  • 构建(验证 PR)
    • Visual Studio 构建
    • Visual Studio 测试
    • VS测试
  • 发布(合并到master后发布Artifact)
    • Visual Studio 构建
    • 复制文件
    • 发布构建工件

仅当使用 YAML 阶段中的条件和启用分支策略创建 PR 时,才会触发构建部分。 Publish 部分只有在合并到 master 时才会触发。

有些步骤需要重复,但执行是唯一的,这有点烦人,并且使用相同的管道,我可以在合并之前执行验证,然后在代码进入主版本后创建工件。

结帐选项没有帮助,因为在我的情况下,每个阶段都在完全不同的容器上执行。


0
投票

快速回答。仅使用步骤,因为它们在同一代理上按顺序运行

如果您使用MS托管代理(例如windows-2022),根据我的经验,管道会为每个阶段和作业启动一个新代理,因此在这种情况下获得相同的代理似乎“不可能”。我可能错了。

或者,您可以跨阶段使用工件并保持并行化选项打开。

在构建阶段/工作结束时:

如果需要的话。 将文件复制到artifactstaging目录:

- task: CopyFiles@2
  inputs:
    Contents: '**'
    TargetFolder: '$(build.artifactstagingdirectory)'

添加“保存”您的构建结果的发布工件。

- publish: '$(Build.ArtifactStagingDirectory)'
  name: CheckoutAndBuildToPipelineArtifact
  displayName: 'Publish CheckoutAndBuildToPipelineArtifact'
  artifact: drop 

在下一阶段/作业(部署)开始时:

您将从构建中下载工件结果。

steps:
- checkout: none # Don´t check out repository. Might be redundant
- download: current # The artifact created in the current pipeline
  artifact: CheckoutAndBuildToPipelineArtifact
© www.soinside.com 2019 - 2024. All rights reserved.