我正在尝试对 azure pipelines yaml 文件中的变量值进行相等检查,但无论输入是什么,它都会返回 False。这是存储在库中的变量,
然后我尝试像这样回应响应
pool:
name: Azure Pipelines
vmImage: 'windows-latest'
variables:
- group: sample
- name: skipBuild
value: '$(skip-build)'
stages:
- stage: Test_stage
condition: eq(variables['Build.SourceBranch'], 'refs/heads/test')
jobs:
- job: Test
steps:
- script: |
echo "Check eq('false', 'false') ${{eq('false', 'false')}} eq('${{ variables.skipBuild }}', 'false') ${{ eq('${{ variables.skipBuild }}', 'false') }}"
所以我上面所做的是,我首先对 eq('false', 'false') 中的值进行硬编码,并返回 true,但是当它输入实际变量时,它返回 false。您可以看到该变量在第二个 eq 输出中被正确读取,并且在转换中似乎也没有问题,因为预期的和实际的都是字符串。那么我该如何克服这个问题。为什么我在进行变量检查时总是得到 False,即使它应该返回 true?
最佳答案
问题是 ${{ Variables.skipBuild }}
是编译时表达式,并且变量的值在编译时未知(因为它来自变量组)。
如果您将 skipBuild
变量的值设置为运行时表达式,则该表达式将在运行时进行计算,并且能够看到 skip-build
的值变量。
这是上述管道的修改版本,展示了这一点:
pool:
vmImage: 'windows-latest'
variables:
- group: sample
- name: skipBuild
value: $[eq(variables['skip-build'], 'False')] # runtime expression
steps:
- script: |
echo $(skipBuild) # outputs 'True'
有关 Azure Pipelines 中运行时与编译时表达式的详细信息,请参阅此处的 MS 文档:Expressions .
关于无论变量值是什么,Azure devops eq 都会返回 false,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/77171499/