我试图在一个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 (较低值适用于常量值)
发布于 2020-08-31 22:28:43
解决方案是使用运行时变量,因为变量组不是在编译时解析的。运行时表达式有一些限制,但以下是有效的:
- name: environmentShortName
value: $[lower(variables['Infra.Environment.ShortName'])]
resourceGroupName: mst-$(environmentShortName)-infra发布于 2020-08-31 20:28:25
以下代码片段将正常工作,并将"mst-test-infra“作为输出:
variables:
environmentShortName: TEST
steps:
- powershell: Write-Host "${{ format('mst-{0}-infra', lower(variables.environmentShortName)) }}"这是因为变量设置为文字值,并且该值在编译时是已知的。
如果environmentShortName的值依赖于另一个变量,例如:
environmentShortName: $(System.TeamProject)下面的()将不能正常工作,其行为与您所描述的完全相同。有(我的)逻辑解释:表达式${{ variables.environmentShortName}}是在编译时解析的,也许您的变量值还没有准备好解析。
要处理此类行为,请考虑更改应用lower()的位置,并将其移动到变量声明部分:
variables:
environmentShortName: ${{ lower(variables['System.TeamProject'] ) }}
steps:
- powershell: Write-Host "mst-$(environmentShortName)-infra"https://stackoverflow.com/questions/63669006
复制相似问题