我试图在YAML模板中使用lower()函数,但不了解其行为。 我有一个名为Infra.Environment.ShortName的变量组,其值为“ Dev”。 在我的YAML模板中,我从变量组定义了一个变量:
variables:
- name: environmentShortName
value: $(Infra.Environment.ShortName)
在任务中,我指代此变量:
- task: AzureResourceGroupDeployment@2
displayName: 'Deploy Storage Account'
inputs:
azureSubscription: ${{ parameters.subscription }}
resourceGroupName: mst-${{ lower(variables.environmentShortName) }}-infra
location: '$(Infra.Environment.Region.Primary)'
csmFile: '$(Pipeline.Workspace)/$(Build.DefinitionName)/Resources/infra-storageAccount.json'
csmParametersFile: '$(Pipeline.Workspace)/$(Build.DefinitionName)/Resources/infra-storageAccount.parameters.json'
deploymentOutputs: ArmOutputs
我尝试了不同的表达式,但是不明白为什么我不能将变量组值转换为小写:
resourceGroupName: mst-${{ lower(variables.environmentShortName) }}-infra
=> mst-Dev-infra(下部似乎不起作用)
resourceGroupName: ${{ format('mst-{0}-infra', lower(variables.environmentShortName)) }}
=> mst-Dev-infra(格式有效,但较低的格式无效)
resourceGroupName: $[format('mst-{0}-infra', lower(variables.environmentShortName))]
=> $ [format('mst- {0} -infra',lower(variables.environmentShortName))](表达式未评估)
resourceGroupName: mst-${{ lower(variables['Infra.Environment.ShortName']) }}-infra
=> mst-红外(空值)
resourceGroupName: mst-${{ lower('Dev') }}-infra
=> mst-dev-infra(下层为常数)
答案 0 :(得分:1)
解决方案是使用运行时变量,因为在编译时不解析变量组。运行时表达式有一些局限性,但是可以起作用:
- name: environmentShortName
value: $[lower(variables['Infra.Environment.ShortName'])]
resourceGroupName: mst-$(environmentShortName)-infra
答案 1 :(得分:0)
以下代码段将正常工作,并在输出中写入“ mst-test-infra”:
variables:
environmentShortName: TEST
steps:
- powershell: Write-Host "${{ format('mst-{0}-infra', lower(variables.environmentShortName)) }}"
这是因为变量设置为文字值,并且该值在编译时是已知的。
如果environmentShortName的值依赖于另一个变量,例如:
environmentShortName: $(System.TeamProject)
lower()将无法正常工作,并且行为与您所描述的相同。
有一个(我的)逻辑解释:表达式${{ variables.environmentShortName}}
是在编译时解析的,也许您的变量值尚未准备好解析。
要处理此类行为,请考虑更改应用lower()
的位置并将其移至变量声明部分:
variables:
environmentShortName: ${{ lower(variables['System.TeamProject'] ) }}
steps:
- powershell: Write-Host "mst-$(environmentShortName)-infra"