首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在表达式中引用Azure DevOps矩阵变量?

如何在表达式中引用Azure DevOps矩阵变量?
EN

Stack Overflow用户
提问于 2020-04-07 11:33:48
回答 1查看 2.8K关注 0票数 9

我试图弄清楚如何在编译时表达式中访问Azure DevOps矩阵变量。引用值始终为空/空/缺失。好像变量还没被设定一样。

下面是我正在尝试的一个示例yml文件:

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-04-08 05:07:16

对于关键字Matrix,它用于将多个信任分配到多个运行时作业。换句话说,包含Matrix关键字的YAML将在运行时而不是parse time中展开。因此,变量buildConfiguration是一个运行时变量,在编译时是不可用的,也无法得到。

另外,${{ }}是一种在编译时处理变量的格式

现在,毫无疑问,您遇到的问题是一个预期的操作,因为您试图在编译时上获得一个运行时变量

因此,要打印出buildConfiguration的值,需要使用$()格式

将YAML脚本更改为:

代码语言:javascript
复制
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)将条件拆分,并将其转换为模板yml文件中定义的任务的condition

比如:

代码语言:javascript
复制
  - script: echo "hello"
    condition: and(succeeded(), eq(variables.buildConfiguration, 'Debug'))
票数 12
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61079112

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档