gpt4 book ai didi

azure-devops - 如何在池需求中使用矩阵变量?

转载 作者:行者123 更新时间:2023-12-03 11:10:05 26 4
gpt4 key购买 nike

对于 Azure Pipelines yaml 文件,我想在某个池中的每个代理上运行一组任务一次。当我查看工作策略矩阵时,它看起来是一个很好的解决方案,但它目前无法获取我为此使用的变量。

与此问题相关的管道 yaml 文件是以下部分:

resources:
- repo: self

trigger: none

jobs:
- job: RunOnEveryAgent
strategy:
maxParallel: 3
matrix:
agent_1:
agentName: Hosted Agent
agent_2:
agentName: Hosted VS2017 2
agent_3:
agentName: Hosted VS2017 3
pool:
name: Hosted VS2017
demands:
- msbuild
- visualstudio
- Agent.Name -equals $(agentName)

steps:
- (etc.)

使用此脚本,我尝试设置一个矩阵,以便在池中的三个代理中的每一个上运行一次。但是,当我尝试在需求列表中引用代理时,它并没有选择它。实际的错误信息如下:

[Error 1] No agent found in pool Hosted VS2017 which satisfies the specified demands:

msbuild

visualstudio

Agent.Name -equals $(agentName)

Agent.Version -gtVersion 2.141.1



如果我对代理名称进行硬编码,它确实有效:
    demands:
- msbuild
- visualstudio
- Agent.Name Hosted VS2017 3

是否支持在池需求中使用这些变量?或者我应该使用不同的变量或表达式?

最佳答案

由于变量的扩展顺序不同,其中一些作业不支持变量。

但是,您可以做的是将模板包含语法( https://docs.microsoft.com/en-us/azure/devops/pipelines/process/templates?view=azure-devops )用于您的工作策略,并将代理名称作为参数传递。

因此,您在自己的 YAML 文件中的构建作业可能如下所示:

parameters:
agentName1: ''
agentName2: ''
agentName3: ''

jobs:
- job: RunOnEveryAgent
strategy:
maxParallel: 3
matrix:
agent_1:
agentName: ${{ parameters.agentName1 }}
agent_2:
agentName: ${{ parameters.agentName2 }}
agent_3:
agentName: ${{ parameters.agentName3 }}
pool:
name: Hosted VS2017
demands:
- msbuild
- visualstudio
- Agent.Name -equals ${{ parameters.agentName3 }}

steps:

您的主 azure-pipelines.yml然后变成这样:
resources:
- repo: self

trigger: none

jobs:
- template: buildjob.yml
parameters:
agentName1: 'Hosted Agent'
agentName2: 'Hosted VS2017 2'
agentName3: 'Hosted VS2017 3'

关于azure-devops - 如何在池需求中使用矩阵变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53171662/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com