首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Azure DevOps YAML管道中,lower()函数似乎不起作用

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

Stack Overflow用户
提问于 2020-08-31 18:24:31
回答 2查看 2K关注 0票数 4

我试图在一个YAML模板中使用lower()函数,但是我不理解它的行为。我有一个变量组,名为Infra.Environment.ShortName,值为"Dev“。在我的YAML模板中,我定义了一个来自变量组的变量:

代码语言:javascript
复制
  variables:
  - name: environmentShortName
    value: $(Infra.Environment.ShortName)

在任务中,我引用这个变量:

代码语言:javascript
复制
- 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

我尝试过不同的表达式,但不明白为什么我不能将变量组值转换为小写:

代码语言:javascript
复制
resourceGroupName: mst-${{ lower(variables.environmentShortName) }}-infra

=> mst-Dev-infra (较低版本似乎不起作用)

代码语言:javascript
复制
resourceGroupName: ${{ format('mst-{0}-infra', lower(variables.environmentShortName)) }}

=> mst-Dev-infra (格式有效,但较低不起作用)

代码语言:javascript
复制
resourceGroupName: $[format('mst-{0}-infra', lower(variables.environmentShortName))]

=> $format('mst-{0}-infra', lower(variables.environmentShortName))

代码语言:javascript
复制
resourceGroupName: mst-${{ lower(variables['Infra.Environment.ShortName']) }}-infra

=> mst--下标(空值)

代码语言:javascript
复制
resourceGroupName: mst-${{ lower('Dev') }}-infra

=> mst-dev-infra (较低值适用于常量值)

EN

回答 2

Stack Overflow用户

发布于 2020-08-31 22:28:43

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

代码语言:javascript
复制
  - name: environmentShortName
    value: $[lower(variables['Infra.Environment.ShortName'])]

    resourceGroupName: mst-$(environmentShortName)-infra
票数 3
EN

Stack Overflow用户

发布于 2020-08-31 20:28:25

以下代码片段将正常工作,并将"mst-test-infra“作为输出:

代码语言:javascript
复制
variables:
  environmentShortName: TEST

steps:
- powershell: Write-Host "${{ format('mst-{0}-infra', lower(variables.environmentShortName)) }}"

这是因为变量设置为文字值,并且该值在编译时是已知的。

如果environmentShortName的值依赖于另一个变量,例如:

代码语言:javascript
复制
environmentShortName: $(System.TeamProject)

下面的()将不能正常工作,其行为与您所描述的完全相同。有(我的)逻辑解释:表达式${{ variables.environmentShortName}}是在编译时解析的,也许您的变量值还没有准备好解析。

要处理此类行为,请考虑更改应用lower()的位置,并将其移动到变量声明部分:

代码语言:javascript
复制
variables:
  environmentShortName: ${{ lower(variables['System.TeamProject'] ) }}

steps:
- powershell: Write-Host "mst-$(environmentShortName)-infra"
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63669006

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档