如何跳过模板,如果变量不等于期望值在azure管道yaml?



我有一个。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'时执行

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

我使用的另一个if条件格式是
- ${{ if ne(variables['taskName.command1'], 'none') }}: 
- ${{ if ne('$(command1)', 'none') }}: 

以上都无效

请帮忙解决这个问题。

如下所示:

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

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'是运行时的。

相关内容

  • 没有找到相关文章

最新更新