2
votes

I'd like to use a parameter to enable the pipeline to switch between running on dedicated agents or an azure host by switching between

pool: name: Default

and

pool: 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'

I've tried various variations but keep getting the error 'A template expression is not allowed in this context'

Am i missing something?, feels like this shouldn't be that hard.

1

1 Answers

2
votes

At present, we can not use this script to help us switch the pool. But we have a work around to help us. We can use the Parameters to select a template at runtime, refer doc. We can set different agent in the template then select the temp at runtime. So on my side, I create a demo to help you know:

Main 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 by using self-agent:

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

temp2.yaml by using the hosted agent:

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

Note: You can use the key word 'pool' both in the job and stage.