按参数改变 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 }}
我想使用一个参数使管道能够在 运行 专用代理或 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 }}