无论变量值是什么,Azure devops eq 都会返回 false

标签 azure azure-devops azure-pipelines azure-pipelines-yaml

我正在尝试对 azure pipelines yaml 文件中的变量值进行相等检查,但无论输入是什么,它都会返回 False。这是存储在库中的变量, enter image description here

然后我尝试像这样回应响应

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') }}"

输出是这样的, enter image description here

所以我上面所做的是,我首先对 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/

相关文章:

javascript - 如何在 MSAL 的 redirectUri 中使用相对 url?

azure - 为什么只有 Python 3.8 - Azure ML 内核可以在笔记本中找到 openai 模块

.net - 无法使用 StackExchange.Redis 连接到 C# 中的 Azure Redis 缓存(超时错误)

azure - 在 VSTS/Azure DevOps 上构建时出现 "npm run build"错误

azure-devops - VSTS 构建包括所有以前的提交作为关联的更改

python - 如何从azure blob存储编辑pdf而不将其下载到本地? (使用菲茨)

.net - 分析 Service Fabric 应用程序

c# - MsBuild 在 Visual Studio Online 上找不到还原的 NuGet 包

azure-devops - 为什么 VSTS Build "Visual Studio Test"步骤找不到我的 NUnit 测试?

ionic-framework - 使用 Azure Pipelines 为 ionic 电容器应用程序构建 XCode(没有此类模块 'Capacitor' )