如何根据哪个代理是 运行 Azure DevOps 构建管道来设置变量?
How can I set a variable based on which agent is running an Azure DevOps build pipeline?
我们有多个自托管构建代理。我们构建管道之一的一个步骤是将一些工件复制到网络驱动器。我们通过 PowerShell 脚本执行此操作,该脚本将目标作为参数。我们希望此目的地根据运行管道的代理(或代理池)而有所不同。
我想知道如何向指定此路径的代理添加用户定义的功能,但您不能在管道中将其用作变量。
我也试过这个:
parameters:
- name: PoolName
displayName: Pool Name
type: string
default: Pool A
values:
- Pool A
- Pool B
pool:
name: ${{ parameters.PoolName }}
variables:
${{ if eq(parameters.PoolName, 'Pool A') }}:
BuildArchiveLocation: 'foo'
${{ if eq(parameters.PoolName, 'Pool B') }}:
BuildArchiveLocation: 'bar'
但在 name: ${{ parameters.PoolName }}
行收到 A template expression is not allowed in this context
。
有什么好的方法可以做到这一点吗?
这很奇怪,你不能在这个级别使用 运行时间参数。但是,如果您将池置于作业级别,您应该能够 运行 您的管道。所以请尝试:
parameters:
- name: PoolName
displayName: Pool Name
type: string
default: Pool A
values:
- Pool A
- Pool B
variables:
${{ if eq(parameters.PoolName, 'Pool A') }}:
BuildArchiveLocation: 'foo'
${{ if eq(parameters.PoolName, 'Pool B') }}:
BuildArchiveLocation: 'bar'
jobs:
- job: build
displayName: Build and Test
pool:
name: ${{ parameters.PoolName }}
steps:
- script: echo building $(Build.BuildNumber)
脚本通过验证:
我也有类似的需要参数化池,但我还需要在托管和私有构建代理之间切换。您必须按如下方式调节整个池节点。您不能将参数条件化到池节点。
parameters:
- name: BuildAgent
type: string
default: private
values:
- private
- hosted
jobs:
- job: BuildJob
displayName: Build
${{ if eq(parameters.BuildAgent, 'private') }}:
pool: default #whatever your private agent pool name is
${{ if eq(parameters.BuildAgent, 'hosted') }}:
pool:
vmImage: windows-latest
我们有多个自托管构建代理。我们构建管道之一的一个步骤是将一些工件复制到网络驱动器。我们通过 PowerShell 脚本执行此操作,该脚本将目标作为参数。我们希望此目的地根据运行管道的代理(或代理池)而有所不同。
我想知道如何向指定此路径的代理添加用户定义的功能,但您不能在管道中将其用作变量。
我也试过这个:
parameters:
- name: PoolName
displayName: Pool Name
type: string
default: Pool A
values:
- Pool A
- Pool B
pool:
name: ${{ parameters.PoolName }}
variables:
${{ if eq(parameters.PoolName, 'Pool A') }}:
BuildArchiveLocation: 'foo'
${{ if eq(parameters.PoolName, 'Pool B') }}:
BuildArchiveLocation: 'bar'
但在 name: ${{ parameters.PoolName }}
行收到 A template expression is not allowed in this context
。
有什么好的方法可以做到这一点吗?
这很奇怪,你不能在这个级别使用 运行时间参数。但是,如果您将池置于作业级别,您应该能够 运行 您的管道。所以请尝试:
parameters:
- name: PoolName
displayName: Pool Name
type: string
default: Pool A
values:
- Pool A
- Pool B
variables:
${{ if eq(parameters.PoolName, 'Pool A') }}:
BuildArchiveLocation: 'foo'
${{ if eq(parameters.PoolName, 'Pool B') }}:
BuildArchiveLocation: 'bar'
jobs:
- job: build
displayName: Build and Test
pool:
name: ${{ parameters.PoolName }}
steps:
- script: echo building $(Build.BuildNumber)
脚本通过验证:
我也有类似的需要参数化池,但我还需要在托管和私有构建代理之间切换。您必须按如下方式调节整个池节点。您不能将参数条件化到池节点。
parameters:
- name: BuildAgent
type: string
default: private
values:
- private
- hosted
jobs:
- job: BuildJob
displayName: Build
${{ if eq(parameters.BuildAgent, 'private') }}:
pool: default #whatever your private agent pool name is
${{ if eq(parameters.BuildAgent, 'hosted') }}:
pool:
vmImage: windows-latest