我们有多个自托管的构建代理。我们的构建管道之一的步骤是将一些工件复制到网络驱动器。我们通过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'
但是在A template expression is not allowed in this context
行收到了name: ${{ parameters.PoolName }}
。
有什么好方法吗?
答案 0 :(得分:0)
奇怪的是,您不能在此级别使用运行时参数。但是,如果将池置于作业级别,则应该能够运行管道。所以请尝试:
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)
脚本通过了验证:
答案 1 :(得分:0)
我同样需要参数化池,但是我还需要在托管和私有构建代理之间切换。您必须按以下条件设置整个池节点。您不能将参数作为池节点的条件。
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