如何根据哪个代理是 运行 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