当变量用作参数时,azure devops 模板中的表达式不起作用

问题描述 投票:0回答:1

我正在构建一个通用模板,以按照我的管道需要的方式格式化变量。

format_vars.yml:

parameters: 
  - name: var
    type: string

variables:
  var_formatted: ${{ lower(parameters.var) }}

使用字符串作为参数测试管道:

variables:
  - template: format_vars.yml
    parameters:
      var: AAA
  
jobs:
  - job: teste
    steps:
      - script: |
         echo $(var_formatted)

此管道会回响 aaa

使用变量作为参数测试管道:

variables:
  - name: var1
    value: AAA
  - template: format_vars.yml
    parameters:
      var: $(var1)
  
jobs:
  - job: teste
    steps:
      - script: |
         echo $(var_formatted)

此管道与 AAA 相呼应。

这是预期的行为吗?我想无论客户端如何决定传递参数,模板都应该具有相同的结果。

azure-devops azure-pipelines parameter-passing azure-pipelines-yaml
1个回答
0
投票

模板表达式

${{ ... }}
编译 时评估。

考虑这个模板:

parameters: 
  - name: var
    type: string

variables:
  - name: var_formatted
    value: ${{ lower(parameters.var) }}

当参数值为

AAA
(硬编码值)时,变量
var_formatted
将被设置为
aaa

variables:
  - name: var1
    value: AAA
  - name: var_formatted
    value: aaa

但是如果参数值为

$(var1)
$(VAR1)
,那么变量
var_formatted
将被设置为
$(var1)
- 宏语法变量
$(var)
在管道编译之后和任务在运行时执行之前进行处理.

variables: variables: - name: var1 value: AAA - name: var_formatted value: $(var1)
运行管道时,变量

$(var_formatted)

将被
递归扩展并打印AAA

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.