带有手动运行和用户设置变量的 Azure Devops 管道:如何检查条件中的变量?

时间:2021-03-05 17:08:02

标签: azure-devops azure-devops-pipelines

希望有人能帮助我回顾我的 git 日志我现在已经尝试了 14 种不同的方法来尝试让它工作。场景如下:

  • 我在 UI 中创建了一个名为 deploy_custom_env 的变量,并选中了“用户可以在运行时设置变量”。我将其初始化为“默认”,但我希望用户在开始手动运行时覆盖它。

  • 我正在尝试在 condition 中为我的一些管道阶段使用这个变量。

  • 我尝试了很多很多不同的东西。以下是一些示例:

首先:

condition: ne(variables.deploy_custom_env, 'default')

condition: ne('${{ variables.deploy_custom_env }}', 'default')

variables:
- name: isCustomEnv
  value: ne[($(deploy_custom_env), 'default')]

甚至

variables:
  - name: isCustomEnv
    value: ne[(variables.deploy_custom_env, 'default')]

有趣的是,当尝试使用上述方法时, 以下两种情况都会导致跳过阶段:

condition: eq(variables.isCustomEnv, true)
condition: eq(variables.isCustomEnv, false)

这是否意味着它既是 true 又是 false? (当然,我是在开玩笑:我不知道这实际上评估了什么。)我还尝试启用 System.debug 并选中“启用系统诊断”`,但是当我的阶段被跳过时,我不能不要真正了解这些变量的评估结果。

如果您有任何建议或文档可以帮助我解决此问题,我将不胜感激。这肯定是人们做的事情吗?此外,建议从 Azure 阅读的任何人:我很想在文档中的某个地方看到这个例子。

我看了以下内容试图回答这个问题:

在后者中,我看到了编译时和运行时的区别,有以下注意事项:

<块引用>

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

这似乎相关,但我如何将其转化为适用于我的 condition 的内容?

2 个答案:

答案 0 :(得分:2)

我会再给你一个变量语法来尝试,然后是另一种方法

此语法适用于您之前指出的描述的变量:

stages:
  - stage: FirstStage
    jobs:
      - job: FirstJob
        pool:
          vmImage: 'windows-latest'
        steps:
        - pwsh: Write-Host "deploy custom environment is default"
          displayName: Run if default
          condition: eq(variables['deploy_custom_env'], 'default')
        - pwsh: Write-Host "deploy custom environment is notdefault"
          displayName: Run if not default
          condition: ne(variables['deploy_custom_env'], 'default')

另一种方法是不使用在 UI 中声明的变量,而是使用构建的参数 - 这将设置默认值,并允许您在构建构建队列时更改它:

parameters:
- name: deploy_custom_env
  type: string
  default: 'default'

stages:
  - stage: FirstStage
    jobs:
      - job: FirstJob
        pool:
          vmImage: 'windows-latest'
        steps:
        - pwsh: Write-Host "deploy custom environment is default"
          displayName: Run if default
          condition: eq('${{ parameters.deploy_custom_env }}', 'default')
        - pwsh: Write-Host "deploy custom environment is notdefault"
          displayName: Run if not default
          condition: ne('${{ parameters.deploy_custom_env }}', 'default')

这样做的好处是,在构建构建队列时,会将默认值的提示放在您面前 - 您不必深入了解变量。

注意: 这种方法适用于管道,不适用于模板或嵌套模板中的条件,因为当参数可用时... . 棘手。

答案 1 :(得分:0)

如果您在 yml 文件中执行此操作,则 $(deploy_custom_env) 应该可以工作。