我有运行模板的步骤之一。
我需要执行带有两个不同参数范围的模板,具体取决于管道变量之一的值。
例如,如果管道变量'mode'具有值'dev',则我需要在一个范围内运行模板,如果值是'stage',则是另一范围。
- ${{ if eq(parameters.mode, 'dev') }}:
- template: ../template.yaml
parameters:
mode: dev
namespace: dev-namespace
fqdn: dev-fqdn
- ${{ if eq(variables.mode, 'staging') }}:
- template: ../template.yaml
parameters:
mode: staging
namespace: staging-namespace
fqdn: staging-fqdn
答案 0 :(得分:0)
您应使用此语法${{ if eq(variables['mode'], 'staging') }}:
答案 1 :(得分:0)
这取决于变量将在何时read in at and used。还有更多可能的答案。
如果将它们用于将来执行模板,我建议使用condition并定义单独的yml变量文件中的参数。
condition: eq('${{ variables.mode}}', 'staging)
那样,通话将只是
job:
condition: eq('${{ variables.mode}}', 'staging')
variables: staging.yml
- template: ../template.yaml
parameters:
mode: ${{ variables.mode }}
namespace: ${{ variables.namepsace }}
fqdn: ${{ variables.fqdn }}
staging.yml看起来像:
variables:
mode: staging
namespace: staging-namespace
fqdn: staging-fqdn
通过这种方式,它的耦合性和可伸缩性有所降低,而不必每次都对其进行硬编码。
答案 2 :(得分:0)
1。如果您使用的是runtime parameters,则可以使用以下格式:
trigger:
- master
parameters:
- name: mode
displayName: Choose mode
type: string
default: dev
values:
- dev
- staging
pool:
vmImage: 'windows-latest'
steps:
- ${{ if eq(parameters.mode, 'dev') }}:
- template: template.yml
parameters:
mode: dev
- ${{ if eq(parameters.mode, 'staging') }}:
- template: template.yml
parameters:
mode: staging
有关更多详细信息,请检查Parameters to select a template at runtime。
2。如果直接使用yaml中定义的变量,请检查我的另一个示例:
trigger:
- master
variables:
mode: staging
pool:
vmImage: 'windows-latest'
stages:
- stage: Dev
condition: eq(variables.mode, 'dev')
jobs:
- job:
steps:
- template: template.yml
parameters:
mode: dev
- stage: Staging
condition: eq(variables.mode, 'staging')
jobs:
- job:
steps:
- template: template.yml
parameters:
mode: staging
我建议使用运行时参数方式,因为它更方便,更灵活。
更新1:
这是我简单的template.yml
文件,仅供测试:
parameters:
- name: mode
type: string
default: default
steps:
- script: echo ${{ parameters.mode }}