我正在使用Azure DevOps的YAML管道,不确定是否可以在整个管道中使用单个代理。
我有多个任务/阶段-构建、部署、后部署,并希望将其分配给单个代理,因为它正在消耗相同的工件。
是否有一种方法可以通过管道分配单个代理。
提前感谢。
提前感谢。
是的,有一种方法,你需要做的就是将第一份工作的代理名称存储在一个变量中,然后对于任何其他工作,你需要要求相同的代理。操作如下:
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)
是的,您可以在YAML中定义一个特定的代理。
例如: pool: name: 代理池名称 demands: - agent.name -equals 代理名称
https://learn.microsoft.com/en-us/azure/devops/pipelines/process/demands?view=azure-devops&tabs=yaml
快速回答。仅在同一代理上按顺序使用步骤。
如果使用MS托管代理(例如windows-2022),根据我的经验,流水线会为每个阶段和作业启动一个新代理,因此在这种情况下获取相同代理似乎是“不可能的”。我可能错了。
或者,您可以跨阶段使用构件并保持并行选项开启。
在构建阶段/作业结束时:
如果需要的话,将文件复制到artifactstagingdirectory中。- 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