azure-devops - 如何在表达式中引用 Azure DevOps 矩阵变量?
问题描述
我试图弄清楚如何在编译时表达式中访问 Azure DevOps 矩阵变量。参考值始终为空/空/缺失。就像没有设置变量一样。
这是我正在尝试的示例 yml 文件:
jobs:
- job: LinuxBuild
displayName: Pew Pew
strategy:
matrix:
debugJob:
buildConfiguration: Debug
releaseJob:
buildConfiguration: Release
pool:
vmImage: 'ubuntu-16.04'
steps:
- script: echo ${{variables.debugJob.buildConfiguration}} ## <-- always null/empty
- script: echo ${{variables['debugJob.buildConfiguration']}} ## <-- always null/empty
- ${{ if eq(variables.debugJob.buildConfiguration, 'Debug') }}: ## <-- never ran/executed
- template: doSomething.yml@templates
解决方案
对于关键字Matrix
,它用于将多配置扩展为多个运行时作业。换句话说,包含Matrix
关键字的 YAML 将在运行时扩展,而不是parse time
. 所以,该变量buildConfiguration
是一个运行时变量,在编译时是不可用的,也无法获取。
此外,是一种在编译时${{ }}
处理变量的格式。
现在,毫无疑问,您遇到的问题是预期的操作,因为您试图在compile time获取运行时变量。
因此,要打印 的值buildConfiguration
,您需要使用的格式$()
将您的 YAML 脚本更改为:
jobs:
- job: LinuxBuild
displayName: Pew Pew
strategy:
matrix:
debugJob:
buildConfiguration: Debug
releaseJob:
buildConfiguration: Release
pool:
vmImage: 'ubuntu-16.04'
steps:
- script: echo $(buildConfiguration)
- script: echo "hello"
condition: and(succeeded(), eq(variables.buildConfiguration, 'Debug'))
现在,让我们专注于您所做的另一次尝试:- ${{ if eq(variables.debugJob.buildConfiguration, 'Debug') }}:
.
首先,您需要知道${{ if xxx }}
,这是template expression
在编译时处理的。这意味着,系统将解析该值,然后决定是否应该运行下一步/作业/模板。此过程发生在管道运行之前。我们称之为初始步骤。
正如我上面提到的,buildConfiguration
是一个运行时变量。它仅在运行时可用。因此,它的值无法在编译时获得。在编译时,它的值将被解析为null
. 这就是为什么你的模板永远不会被运行。
您可以考虑两种变通方法来使此条件成立。
1)在条件中更改为使用另一个变量,该变量在编译时和运行时都可用。例如Build.SourceBranchName
。
2)拆分条件并将它们更改为condition
模板yml文件中定义的任务。
像:
- script: echo "hello"
condition: and(succeeded(), eq(variables.buildConfiguration, 'Debug'))
推荐阅读
- ionic-framework - 如何修复 UIWebView 已弃用的 Ionic 4
- tcl - 在 Tcl 中使用字符串递增数组时如何修复预期的整数错误
- sql - 如何在 SQL Server 中获取具有相同产品和品牌的所有包?
- php - 针对特定用户禁用 WooCommerce 特定产品
- c - 为什么 C 标准不公开获取 malloc 块大小的函数?
- html - 如何将链接添加到 CSS 选择字段?
- python - 如何使用硒(Python)从 SELECT 中选择一个选项?
- flask-mongoengine - 如何使用 flask-mongoengine 连接 cosmosDB
- pytorch - 简单的卷积网络
- javascript - 如何从适用于每个选择的多项选择中获取值?