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:
.
这是我第一次使用 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:
.