azure devops yaml管道未设置变量

Posted

技术标签:

【中文标题】azure devops yaml管道未设置变量【英文标题】:azure devops yaml pipeline not setting the variables 【发布时间】:2021-11-23 22:14:59 【问题描述】:

我有一个运行以下模板/变量的 yaml 管道:

    variables:
    - template: vars/global.yaml
    steps:
    - template: steps/debug-vars.yaml

这是 global.yaml:

variables:
  isMain:              $ eq(variables['Build.SourceBranch'], 'refs/heads/main') 
  isProduction:        $ eq(variables['Build.SourceBranch'], 'refs/heads/production') 
  isTag:               $ startsWith(variables['Build.SourceBranch'], 'refs/tags/v') 
  isFork:              $ eq(variables['System.PullRequest.IsFork'], 'True') 
  isPR:                $ eq(variables['Build.Reason'], 'PullRequest') 
  isTrustedCode:       $ eq(variables.isFork, 'False') 
  isScheduled:         $ eq(variables['Build.Reason'], 'Schedule') 
  isTrustedCI:         $ and( eq(variables.isFork,'False'), eq(variables.isPR,'False'), eq(variables.isScheduled,'False') ) 

debug-vars.yaml 使用以下代码检查 vars/global.yaml 中的值:

steps:
- bash: |
    echo ""
    echo "---------"
    echo "Debugging"
    echo "---------"
    echo  "isMain: $ variables.isMain "
    echo  "isProduction: $ variables.isProduction "
    echo  "Build.SourceBranch: $ variables['Build.SourceBranch'] "
  displayName: Debug - Branch Variables

但是当我从主分支运行 CD 管道时,Build.SourceBranch 已填充,而“isMain”未填充,知道为什么吗?

---------
Debugging
---------
isMain: 
isProduction: 
Build.SourceBranch: refs/heads/main
Finishing: Debug - Branch Variables

【问题讨论】:

【参考方案1】:

修复是将 debug-vars.yaml 中的语法从:$ variables.isMain 更改为 $(isMain)

【讨论】:

以上是关于azure devops yaml管道未设置变量的主要内容,如果未能解决你的问题,请参考以下文章

Azure DevOps YAML 管道从传递的变量中删除引号和双反斜杠

Azure Devops - 将 YAML 脚本中的变量设置为日期时间

Azure DevOps YAML并行运行未排队

Azure Devops:如何使用 if 语句设置组变量

Azure DevOps 中的多个 YAML 构建管道

Azure DevOps - 使用参数在 yaml 管道定义中设置路径触发器