如何解决运行时在Azure Devops中的托管代理和Scaleset代理之间切换
我已经配置了scaleset代理并且可以正常工作。但我也想尽可能利用Microsoft托管代理。因此,我在管道中添加了一个参数,以选择用于该特定管道运行的代理池。
我设法根据所选参数设置池/图像变量,但由于语法差异,无法使容器作业使用所选池,如下所示。
是否有一种方法可以基于用户选择的参数来修改Yaml模板的架构。
我认为我们不必有条件地显示vmImage
属性。我尝试了以下代码段,但没有用。 vmImage
属性始终丢失。
pool:
${{ if ne(parameters.pool,'Azure Pipelines') }}:
name: ${{ parameters.pool }}
${{ if eq(parameters.pool,'Azure Pipelines') }}:
vmImage: 'ubuntu-latest'
已更新:
parameters:
- name: pool
displayName: Agent Pool
type: string
default: Scalesets
values:
- Scalesets
- Hosted
jobs:
- deployment: '${{ parameters.jobName }}'
displayName: ${{ coalesce(parameters.jobdisplayName,'Deploy Infrastructure') }}
${{ if parameters.dependsOn }}:
dependsOn: '${{ parameters.dependsOn }}'
${{ if parameters.condition }}:
condition: '${{ parameters.condition }}'
pool:
name: ${{ parameters.pool }}
vmImage: 'ubuntu-latest'
container:
image: '${{ parameters.image }}'
endpoint: 'Container Registry - Prd'
environment: ${{ parameters.environment }}
variables:
- name: 'Release-Tag'
value: '${{ parameters.release }}'
- name: 'Layer'
value: '${{ parameters.environmentLayer }}'
strategy:
runOnce:
deploy:
steps:
- script: |
echo $(Release-Tag) $(Layer)
displayName: 'Show release condidate'
解决方法
您可以将参数的数据类型设置为对象。对象类型的值可以是任何YAML结构。请在此document中找到有关参数数据类型的更多详细信息。 这是我的示例:
parameters:
- name: pool
type: object
default:
pool:
vmImage: ubuntu-latest
jobs:
- job: build
pool: ${{ parameters.pool }}
steps:
- script: echo Hello,world!
您还可以根据参数值选择要运行的作业:
trigger: none
parameters:
- name: type
type: string
values:
- Scalesets
- Hosted
jobs:
- ${{ if eq(parameters.type,'Scalesets') }}:
- job: Scalesets
pool: Default
steps:
- script: echo Scalesets
- ${{ if eq(parameters.type,'Hosted') }}:
- job: Hosted
pool:
vmImage: ubuntu-latest
steps:
- script: echo Hosted
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。