[英]How to access pipeline variables in conditions
我有運行模板作為步驟之一的管道。
我需要使用兩個不同范圍的參數執行模板取決於管道變量之一的值。
例如,如果管道變量“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
您應該使用此語法${{ if eq(variables['mode'], 'staging') }}:
這取決於變量將在 at 讀入和使用的時間。 還有更多可能的答案。
如果將這些用於將來執行模板,我建議使用條件並在單獨的 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
這樣,它的解耦性和可擴展性會降低一些,而不必每次都對其進行硬編碼。
1.如果您使用的是運行時參數,則可以使用以下格式:
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
有關更多詳細信息,您可以檢查參數以在運行時選擇模板。
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 }}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.