Azure yaml中,局部变量、条件变量和模板变量如何一起使用?

In Azure yaml, how to use local variables, conditional variables and template variables together?

考虑以下场景,其中作业(或阶段)需要使用一些本地、条件和模板变量:

# (1) Local for the yaml file
variables:
  buildPlatform: 'Any CPU'
  buildConfiguration: 'Release'

# (2) Conditional, depending on parameters
variables:
  - ${{ if eq(parameters.environment, 'dev') }}:
    - environment: 'development'
  - ${{ if eq(parameters.environment, 'test') }}:
    - environment: 'test'
  - ${{ if eq(parameters.environment, 'prod') }}:
    - environment: 'production'

# (3) Specific, defined on a template file
variables:
  - template: environment-variables-$(environment).yml

如何将这 3 个结合起来?

我需要不依赖于环境的变量 (1),但有些变量是特定于环境的 (3),因此,我根据“parameter.environment”值读取了不同的模板 (2)。

显然,当我尝试多次使用“变量标记”时,Azure-Devops 会抱怨,因为“变量”已经定义了。我该怎么做?

How can I combine these 3?

在 Pipeline YAML 中,变量只能在一个阶段或根级别定义一次。

为了满足您的要求,您需要在同一个变量字段中定义三种类型的变量。

这是一个例子:

parameters:
- name: environment
  displayName: Test
  type: string
  values:
  - dev
  - test
  - prod

variables:
- name: buildPlatform
  value: 'Any CPU'
- name: buildConfiguration
  value: 'Release'
- template: variables.yml


- ${{ if eq(parameters.environment, 'dev') }}:
  - name: environment
    value: development
- ${{ if eq(parameters.environment, 'test') }}:
  - name: environment
    value: test
- ${{ if eq(parameters.environment, 'prod') }}:
  - name: environment
    value: prod