0

我有一个 .yaml 文件

variables:
- name: command1
  value: none 

- scripts: |
  echo '##vso[task.setvariable variable=command1]new_value'

- ${{ if ne(variables['command1'], 'none') }}: 
  - template: templates/run.yml@temp1  # Template reference  
    parameters:
      COMMAND: '$(command1)'

我创建变量有两个原因,

  1. 成为全球性的
  2. 我不希望它显示在用户的变量列表中

'command1'我希望仅在变量值不是时才执行模板'none'

目前它没有跳过,即使变量内的值不是无,它也会继续执行它。

我使用的另一种 if 条件格式是

- ${{ if ne(variables['taskName.command1'], 'none') }}: 
- ${{ if ne('$(command1)', 'none') }}: 

以上都不起作用

请帮助解决此问题。

4

1 回答 1

2

正如这里所写:

运行时和编译时表达式语法之间的区别主要在于可用的上下文。在编译时表达式 (${{ }}) 中,您可以访问参数和静态定义的变量。在运行时表达式 ($[ ]) 中,您可以访问更多变量但没有参数。

variables:
  staticVar: 'my value' # static variable
  compileVar: ${{ variables.staticVar }} # compile time expression
  isMain: $[eq(variables['Build.SourceBranch'], 'refs/heads/main')] # runtime expression

steps:
  - script: |
      echo ${{variables.staticVar}} # outputs my value
      echo $(compileVar) # outputs my value
      echo $(isMain) # outputs True

所以它可以为您的 YAML 值工作:

variables:
- name: command1
  value: none     

steps:
- scripts: |
  echo '##vso[task.setvariable variable=command1]new_value'

- ${{ if ne(variables.command1, 'none') }}: 
  - template: templates/run.yml@temp1  # Template reference  
    parameters:
      COMMAND: '$(command1)'

但是,它将选择这个值:

variables:
- name: command1
  value: none     

没有机会这样做:

- scripts: |
  echo '##vso[task.setvariable variable=command1]new_value'

这是因为 ${{}} 表达式是编译时并且echo '##vso[task.setvariable variable=command1]new_value'是运行时的。

于 2021-08-28T05:07:25.367 回答