使用if/else时,在Azure DevOps Pipeline YAML中出现重复键错误

5
我正在尝试在Azure Devops管道中根据目标分支运行不同的构建模式,因此我创建了一个变量和一个if/else。根据MS文档,我似乎做得很正确。我的IDE进行语法/错误检查时不会抱怨YAML。然而,当我尝试运行构建管道时,buildScript变量会出现“重复键”错误。有人知道解决方法吗?或者我在YAML中做了什么愚蠢的事情吗?我原本认为YAML允许重复的键。
variables:
  slotTarget: 'development'
  ${{ if eq(variables['Build.SourceBranchName'], 'main') }} :
    buildScript: build
  ${{ else }} :
    buildScript: devBuild

jobs:
- job: buildApp
  displayName: 'Build the Vue App'
  #Set ENV.VARS for Webpack to read and inject during build
  - bash: |
      echo Running build for $BUILDNUM
      BUILDNUMBER=$BUILDNUM npm run $(buildScript)
    displayName: 'Create Build - $(build.buildNumber) for GIT $(build.SourceVersion) Trigger: $(build.Reason)'
    env:
      BUILDNUM: $(build.buildNumber)

编辑:我开始怀疑Azure DevOps管道解析器有不同的版本。也许是基于订阅年龄?似乎相同的代码适用于某些人,而对于其他人则不适用。有人可以验证这一点吗?


嗨,伙计,我这里也遇到了同样的问题。我正在尝试在变量中使用if else语句,根据参数输入进行判断,在Azure管道UI中却一直出现相同的错误。 - rick
2个回答

2
今天我尝试了另一种方法,对我有效。
使用以下内容:
- name: buildScript
  ${{ if eq(variables['Build.SourceBranchName'], 'main') }} :
    value: build
  ${{ else }} :
    value: devBuild

在Azure Pipeline浏览器中使用YAML这样做仍然会将两个值都突出显示为重复的键,但是当您尝试验证(从省略号/右上角的三个点)或运行它时,就不会出现问题。不太确定为什么这个不起作用。
注意:在西欧和东南亚地区都尝试过,它们都工作正常。

嗯,有趣的是UI出错了,但它仍然运行。我会试一试。谢谢。 - Bryce Howitson

0

这是我在本地运行的YAML:

variables:
  slotTarget: 'development'
  ${{ if eq(variables['Build.SourceBranchName'], 'main') }} :
    buildScript: build
  ${{ else }} :
    buildScript: devBuild

jobs:
- job: buildApp
  displayName: 'Build the Vue App'
  #Set ENV.VARS for Webpack to read and inject during build
  steps:
  - task: CmdLine@2
    inputs:
      script: |
        echo Write your commands here
        
        echo $(buildScript)

没有任何错误输出。

如果基于主分支运行管道,则返回: enter image description here 如果不基于主分支运行管道,则返回: enter image description here

我认为您使用的表达式是正确的。请在您的端上测试上述管道YAML定义,并让我知道是否仍有一些错误输出。

如果仍然存在错误,由于StackOverflow是一个开放的社区,建议您在Microsoft Developer Community上发布问题,以便我们检查调试日志。


嗨 Bowman,我正在尝试根据参数输入在变量上执行if else操作,但它也会出现重复键错误。是否存在运行时/编译变量问题? - rick
参考此处的内容,我正在遵循参数变量的示例,并使用新的YAML条件表达式。 - rick
我使用你的代码也遇到了同样的错误(变量部分有重复键)。我认为编译器甚至没有进行测试,它只是看到两个“buildScript”变量就抛出了一个错误。 - Bryce Howitson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接