Azure管道使用带有排队变量的模板表达式
我在azure中定义了YAML构建管道:Azure管道使用带有排队变量的模板表达式,azure,variables,time,queue,azure-pipelines,Azure,Variables,Time,Queue,Azure Pipelines,我在azure中定义了YAML构建管道: variables: test: '${{ variables.Environment }}' pool: vmImage: 'ubuntu-latest' steps: - script: | echo $(test) displayName: 'Show test' 我使用定义为“abc”的环境变量将该管道排队: 我希望它能响应abc,但是abc被替换为无变量。环境似乎没有定义 稍后,我想根据环境变量加载不同的变量组,这就是
variables:
test: '${{ variables.Environment }}'
pool:
vmImage: 'ubuntu-latest'
steps:
- script: |
echo $(test)
displayName: 'Show test'
我使用定义为“abc”的环境变量将该管道排队:
我希望它能响应abc
,但是abc被替换为无变量。环境似乎没有定义
稍后,我想根据环境变量加载不同的变量组,这就是我不直接在脚本中回显$(环境)的原因。这只是一个简单的例子
我希望它能呼应abc,但是abc被什么都没有取代-
变量。环境似乎未定义
根据:
运行时发生在模板扩展之后。模板变量在编译时处理,并在运行时开始之前替换。当找不到替换值时,模板变量会自动合并为空字符串
因此,在您的示例中,echo$(test)
只打印空字符串。原因队列变量用于运行时。为此,您可以考虑使用运行时的宏或运行时表达式。test:$(环境)
和test:$[variables.Environment]
在我这方面都很好
稍后,我想加载一个不同的变量组,具体取决于
环境变量,这就是我不回显$(环境)的原因
直接在脚本中。这只是一个简单的例子
正如我所知,根据动态环境
变量链接不同的变量组还不受支持,以下是关于该主题的内容。在这种情况下,这是一个很好的例子
现在Azure Devops服务正在推出新功能,我认为它可以满足您的大部分需求。对于您来说,使用运行时参数而不是不支持的动态Environment
变量可能是一个更好的选择
我对该选项的简单测试:
1.yaml中的内容:
parameters:
- name: group
displayName: Group Name
type: string
default: TestGroup
values:
- TestGroup
- Group2
- Group3
- Group4
variables:
- group: ${{ parameters.group }}
steps:
- script: |
echo $(Name)
displayName: 'Show group name'
2.我的变量组TestGroup:
3.单击运行管道:
4.管道运行良好,显示变量组中定义的变量:
希望有帮助:)
我希望它能呼应abc,但是abc被什么都没有取代-
变量。环境似乎未定义
根据:
运行时发生在模板扩展之后。模板变量在编译时处理,并在运行时开始之前替换。当找不到替换值时,模板变量会自动合并为空字符串
因此,在您的示例中,echo$(test)
只打印空字符串。原因队列变量用于运行时。为此,您可以考虑使用运行时的宏或运行时表达式。test:$(环境)
和test:$[variables.Environment]
在我这方面都很好
稍后,我想加载一个不同的变量组,具体取决于
环境变量,这就是我不回显$(环境)的原因
直接在脚本中。这只是一个简单的例子
正如我所知,根据动态环境
变量链接不同的变量组还不受支持,以下是关于该主题的内容。在这种情况下,这是一个很好的例子
现在Azure Devops服务正在推出新功能,我认为它可以满足您的大部分需求。对于您来说,使用运行时参数而不是不支持的动态Environment
变量可能是一个更好的选择
我对该选项的简单测试:
1.yaml中的内容:
parameters:
- name: group
displayName: Group Name
type: string
default: TestGroup
values:
- TestGroup
- Group2
- Group3
- Group4
variables:
- group: ${{ parameters.group }}
steps:
- script: |
echo $(Name)
displayName: 'Show group name'
2.我的变量组TestGroup:
3.单击运行管道:
4.管道运行良好,显示变量组中定义的变量:
希望有帮助:)此问题的一种变体: TL;博士: 组变量在模板编译时似乎不可用,例如,当根据该组中的变量有条件地设置要运行的模板时,只有在管道中显式设置的变量才可用 长版本: 我有一组变量组;'Group NonProd'、“Group Prod”等。每个变量都包含具有不同值的变量“identifier”(“dev”、“Prod”,用于下面的示例) 我有一个主管道“main pipeline.yml”,其中有几个阶段,每个阶段对应于“identifier”的值,例如:
- stage: NonProd
variables:
- group: 'Group-NonProd' ## includes the variable 'identifier' with value "nonprod"
jobs:
- template: nonprod.yml
parameters:
identifier: $(identifier)
- script: echo "environment is $(identifier)"
- stage: Prod
variables:
- group: 'Group-Prod' ## includes the variable 'identifier' with value "prod"
jobs:
- template: prod.yml
parameters:
identifier: $(identifier)
- script: echo "environment is $(identifier)"
但是,当我运行管道时,参数“identifier”不会扩展到组变量“identifier”中的值-它是空的-我看到当我尝试在下面的条件逻辑中使用变量时(目的是使用此逻辑确定要调用的模板-请参阅注释行-并将该参数传递给它们):
上面的脚本总是使用第二个条件,因为结果总是“使用产品模板,环境为”(空白)
但奇怪的是,如果我在每个阶段都显式设置变量'identifier',它确实可以工作
e、 g.这项工作:
- stage: NonProd
variables:
- group: 'Group-NonProd'
- name: identifier
value: nonprod
jobs:
- template: nonprod.yml
parameters:
identifier: $(identifier)
- script: echo "environment is ${{ parameters.identifier }}"
此问题的一个变体: TL;博士: 组变量在模板编译时似乎不可用,例如,当根据该组中的变量有条件地设置要运行的模板时,只有在管道中显式设置的变量才可用 长版本: 我有一组变量组;'Group NonProd'、“Group Prod”等。每个变量都包含具有不同值的变量“identifier”(“dev”、“Prod”,用于下面的示例) 我有一个主管道“main pipeline.yml”,其中有几个阶段,每个阶段对应于“identifier”的值,例如:
- stage: NonProd
variables:
- group: 'Group-NonProd' ## includes the variable 'identifier' with value "nonprod"
jobs:
- template: nonprod.yml
parameters:
identifier: $(identifier)
- script: echo "environment is $(identifier)"
- stage: Prod
variables:
- group: 'Group-Prod' ## includes the variable 'identifier' with value "prod"
jobs:
- template: prod.yml
parameters:
identifier: $(identifier)
- script: echo "environment is $(identifier)"
但是,当我运行管道时,参数“identifier”不会扩展到组变量“identifier”中的值-它是空的-我看到当我尝试在下面的条件逻辑中使用变量时(目的是使用此逻辑确定要调用的模板-请参阅注释行-并将该参数向下传递给