use*_*243 5 azure-devops azure-pipelines-yaml
我尝试在 YAML 模板中使用 lower() 函数,但不理解其行为。我有一个名为 Infra.Environment.ShortName 的变量组,其值为“Dev”。在我的 YAML 模板中,我从变量组中定义了一个变量:
variables:
- name: environmentShortName
value: $(Infra.Environment.ShortName)
Run Code Online (Sandbox Code Playgroud)
在任务中,我引用这个变量:
- 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
Run Code Online (Sandbox Code Playgroud)
我尝试过不同的表达式,但不明白为什么我无法将变量组值转换为小写:
resourceGroupName: mst-${{ lower(variables.environmentShortName) }}-infra
Run Code Online (Sandbox Code Playgroud)
=> mst-Dev-infra(较低的似乎不起作用)
resourceGroupName: ${{ format('mst-{0}-infra', lower(variables.environmentShortName)) }}
Run Code Online (Sandbox Code Playgroud)
=> mst-Dev-infra (格式有效,但 lower 无效)
resourceGroupName: $[format('mst-{0}-infra', lower(variables.environmentShortName))]
Run Code Online (Sandbox Code Playgroud)
=> $[format('mst-{0}-infra', lower(variables.environmentShortName))] (表达式未计算)
resourceGroupName: mst-${{ lower(variables['Infra.Environment.ShortName']) }}-infra
Run Code Online (Sandbox Code Playgroud)
=> mst--infra(空值)
resourceGroupName: mst-${{ lower('Dev') }}-infra
Run Code Online (Sandbox Code Playgroud)
=> mst-dev-infra(较低的作品使用恒定值)
解决方案是使用运行时变量,因为变量组在编译时未解析。运行时表达式有一些限制,但可以使用以下方法:
- name: environmentShortName
value: $[lower(variables['Infra.Environment.ShortName'])]
resourceGroupName: mst-$(environmentShortName)-infra
Run Code Online (Sandbox Code Playgroud)
以下代码片段将正常工作并写入“mst-test-infra”作为输出:
variables:
environmentShortName: TEST
steps:
- powershell: Write-Host "${{ format('mst-{0}-infra', lower(variables.environmentShortName)) }}"
Run Code Online (Sandbox Code Playgroud)
这是因为变量设置为文字值并且该值在编译时已知。
如果environmentShortName的值依赖于另一个变量,例如:
environmentShortName: $(System.TeamProject)
Run Code Online (Sandbox Code Playgroud)
lower() 将无法正常工作,其行为就像您所描述的那样。有(我的)逻辑解释:表达式${{ variables.environmentShortName}}在编译时解析,也许你的变量值还没有准备好解析。
要处理此类行为,请考虑更改应用的位置lower()并将其移动到变量声明部分:
environmentShortName: $(System.TeamProject)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8391 次 |
| 最近记录: |