lower()函数在Azure DevOps YAML管道中似乎不起作用

时间:2020-08-31 10:24:31

标签: azure-devops azure-pipelines-yaml

我试图在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(下层为常数)

2 个答案:

答案 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"