If statment in Azure Devops Yaml



如果语句有效,我不知道如何做到这一点:

- pwsh: |
$affected = 'bleh'
Write-Host "##vso[task.setvariable variable=affected;isOutput=true]$affected"
- ${{ if eq(variables.affected.Contains('bleh'), 'True') }}:
[...]

它说Unexpected symbol (,这是eq(中的(

谢谢

你的语法有几个问题。

首先,使用模板语法读取在编译之前未在管道中设置的变量。模板语法(用 {{ 包装的表达式(在编译时、设置变量之前(运行时(计算。有关变量语法的详细信息,请参阅此处> https://learn.microsoft.com/en-us/azure/devops/pipelines/process/variables#understand-variable-syntax 您可以在第二步中使用条件属性,而不是使用内联模板。条件语法> https://learn.microsoft.com/en-us/azure/devops/pipelines/process/conditions

其次,您将 isOutput 设置为 true,这用于在作业之间传递变量。它将变量设置为与未设置 isOutput 选项时不同的位置。有关在运行时设置变量的详细信息,请参阅此处> https://learn.microsoft.com/en-us/azure/devops/pipelines/process/variables#set-variables-in-scripts

第三,要做一个包含检查语法是包含(字符串,子字符串(,而不是字符串.包含(子字符串(。请参阅> https://learn.microsoft.com/en-us/azure/devops/pipelines/process/expressions#contains

如果要根据第一个步骤设置的变量有条件地运行第二步,请尝试以下操作:

- pwsh: |
$affected = 'bleh'
Write-Host "##vso[task.setvariable variable=affected]$affected"
- pwsh: echo "do something"
condition: contains(variables.affected, 'bleh')

最新更新