azure-devops - 具有手动运行和用户设置变量的 Azure Devops 管道:如何检查条件中的变量?
问题描述
希望有人可以帮助我回顾我的 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
and false
?(我在开玩笑,当然:我不知道这实际上是什么。)我也尝试过启用System.debug
和检查“启用系统诊断”,但是当我的阶段被跳过时,我真的看不出这些是什么变量正在评估。
我将不胜感激任何可以帮助我解决此问题的建议或文档。这肯定是人们做的事情吗?此外,向 Azure 阅读的任何人推荐:我希望在文档中的某个地方看到这个示例。
我查看了以下内容以尝试回答这个问题:
- https://docs.microsoft.com/en-us/azure/devops/pipelines/process/variables?view=azure-devops&tabs=yaml%2Cbatch#understand-variable-syntax
- https://docs.microsoft.com/en-us/azure/devops/pipelines/build/variables?view=azure-devops&tabs=yaml#build-variables-devops-services
- https://docs.microsoft.com/en-us/azure/devops/pipelines/process/conditions?view=azure-devops&tabs=yaml
- https://docs.microsoft.com/en-us/azure/devops/pipelines/process/expressions?view=azure-devops#conditionally-assign-a-variable
在后者中,我看到了编译时和运行时之间的区别,并附注如下:
运行时和编译时表达式语法之间的区别主要在于可用的上下文。在编译时表达式 (${{ }}) 中,您可以访问参数和静态定义的变量。在运行时表达式 ($[ ]) 中,您可以访问更多变量但没有参数。
这似乎是相关的,但我如何将其转化为在我condition
的 s 中有效的东西?
解决方案
我会给你一个更多的变量语法来尝试,然后是另一种方法来做到这一点
此语法适用于您之前指出的变量:
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')
这样做的好处是在排队构建时将默认值的提示放在您面前 - 您不必深入研究变量。
注意:这种方法适用于管道,它不适用于模板或嵌套模板中的条件,因为当参数可用时可能......很棘手。
推荐阅读
- r - 从 451 个观测值的数据框中构建时间序列对象,这些观测值不规则地间隔 3 个变量
- php - 如何在 php 中设置连续的 kafka 消费者,而不会出现连接超时
- python - 通过 exec() 使用其他变量名称中的变量
- c++ - 如何使用OpenGL渲染到一个QMainWindow的两个QWidget?
- javascript - TypeError:store.getState 不是函数 React-redux
- awk - 使用 awk 删除重复值和排序值
- java - 标准verticle和worker verticle的区别
- javascript - 如何映射此状态的连接值,而不将其作为字符串传递?
- javascript - 引号转义以正确地将参数从 HTML 输入值传递到 PHP 回显中的 javascript 函数
- mongodb - 如何解码 Aggregate() 的返回