首页 > 解决方案 > lower() 函数似乎在 Azure DevOps 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--infra(空值)

resourceGroupName: mst-${{ lower('Dev') }}-infra

=> mst-dev-infra (lower 使用常数值)

标签: azure-devopsazure-pipelines-yaml

解决方案


解决方案是使用运行时变量,因为变量组在编译时未解析。运行时表达式有一些限制,但以下工作:

  - name: environmentShortName
    value: $[lower(variables['Infra.Environment.ShortName'])]

    resourceGroupName: mst-$(environmentShortName)-infra

推荐阅读