YAML 可以将局部变量与组变量混合并简化它们的命名吗?

YAML Can local variables be mixed with group-variables AND have their naming simplified?

这是我第一次使用 YAML,但我 运行 遇到了一个问题,似乎我想包含一个与本地管道相关的变量组(即签名证书密码)变量然后我不能使用简化的命名约定,其中变量的名称和值可以在同一行上定义和设置。

例如,我想要的是类似这样的东西(我确保 YAML 中的间距是正确的):

variables:
  solutionName: Foo.sln
  projectName: Bar
  buildPlatform: x64
  buildConfiguration: development
  major: '1'
  minor: '0'
  build: '0'
  revision: $[counter('rev', 0)]
  vhdxSize: '200'
- group: legacy-pipeline
  signingCertPwd: $[variables.SigningCertificatePassword]

但是,这会导致解析错误。因此,我必须使用更密集但看起来更臃肿的格式:

variables:
- name: solutionName
  value: Foo.sln
- name: projectName
  value: Bar
- name: buildPlatform
  value: x64
- name: buildConfiguration
  value: development
- name: major
  value: '1'
- name: minor
  value: '0'
- name: build
  value: '0'
- name: revision
  value: $[counter('rev', 0)]  
- name: vhdxSize
  value: '200'
- group: legacy-pipeline
- name: signingCertPwd
  value: $[variables.SigningCertificatePassword]

似乎简化命名格式只有在我将它用于局部变量时才可用,但如果我添加一个变量组,那么简化格式就会消失。我曾尝试在网上搜索解决方案,但我找不到任何有用的东西。我想要实现的目标是可能的还是不可能的?如果是,如何实现?

不幸的是,混合样式是不可能的,但您可以使用 templates:

来解决这个问题
# pipeline.yaml

stages:
- stage: declare_vars
  variables:
  - template: templates/vars.yaml
  - group: my-group
  - template: templates/inline-vars.yaml
    parameters:
      vars:
        inline_var: yes!
        and_more: why not
  jobs:
  - job:
    steps:
    - pwsh: |
        echo 'foo=$(foo)'
        echo 'bar=$(bar)'
        echo 'var1=$(var1)'
        echo 'inline_var=$(inline_var)'
# templates/vars.yaml

variables:
  foo: bar
  bar: something else
# templates/inline-vars.yaml

parameters:
- name: vars
  type: object
  default: {}

variables:
  ${{ each var in parameters.vars}}:
    ${{var.key}}: ${{var.value}}

templates/vars.yaml 只是简单地将变量移动到另一个文件。 templates/inline-vars.yaml 允许您使用更密集的语法和引用组来定义内联变量,但还有额外的书写方式 template:parameters:vars:.