按参数改变 azure devops 管道代理

Vary azure devops pipeline agent by parameter

我想使用一个参数使管道能够在 运行 专用代理或 Azure 主机之间切换,方法是在

之间切换

池: 名称:默认

池: vmImage: 'ubuntu-latest'

parameters:
- name: custom_agent
  displayName: Use Custom Agent
  type: boolean
  default: true

    pool:
    ${{ if  eq(parameters.custom_agent, True) }}:
      name: ${{ parameters.agent_pool }}
    ${{ if  eq(parameters.custom_agent, False) }}:
      vmImage: 'ubuntu-latest'

我尝试了各种变体,但一直收到错误 'A template expression is not allowed in this context'

我是不是漏掉了什么?,感觉应该没那么难。

目前我们还不能使用这个脚本来帮我们切换池子。但是我们有一个解决方法来帮助我们。我们可以在运行时使用参数select一个模板,参考doc。我们可以在模板中设置不同的代理,然后 select 运行时的临时值。 所以在我这边,我创建了一个演示来帮助你了解:

主 yaml:

parameters:
  - name: custom_agent
    displayName: Use Custom Agent
    type: boolean
    default: true
  - name: image
    type: string
    default: default

resources:
  repositories:
    - repository: templates
      type: git
      name: Tech-Talk/template

trigger: none
stages:
  - ${{if eq(parameters.custom_agent, True) }}:
    - template: temp.yaml@templates 
  - ${{ if not(eq(parameters.custom_agent, True)) }}:
    - template: temp2.yaml@templates

temp.yaml 通过使用自代理:

stages:
  - stage:
    pool: 'default'          
    jobs:
    - job: READ
      displayName: Reading Parameters      
      steps:
      - powershell: echo "self-agent"

temp2.yaml 通过使用托管代理:

stages:
  - stage:      
    jobs:
    - job: READ
      displayName: Reading Parameters      
      pool:
        # vmImage: windows-latest
        vmImage: ubuntu-20.04
      steps:
      - powershell: echo "self-agent"   

注意:您可以在作业和舞台中使用关键字'pool'。

我发现将 pool 包装在 if 块中是可行的

parameters:
- name: vmImageName
  type: string
  default: 'ubuntu-latest'

- name: agentPoolName
  type: string
  default: null

jobs:  
  - job: Docker
    ${{ if ne(parameters.agentPoolName, 'null')}}:
      pool:
        name: ${{ parameters.agentPoolName }}
    ${{ if eq(parameters.agentPoolName, 'null')}}:
      pool:
        vmImage: ${{ parameters.vmImageName }}