我有一个。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)'
我创建这个变量有两个原因,
- 为全局
- 我不希望它显示在用户的变量列表
我希望模板只在'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'
是运行时的。