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

Bry*_*son 5 yaml azure-devops azure-pipelines azure-pipelines-yaml

我尝试根据 Azure Devops 管道中的目标分支运行不同的构建模式,因此我创建了一个变量和一个 if/ese。

根据此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)
Run Code Online (Sandbox Code Playgroud)

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

Bow*_*SFT 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)
Run Code Online (Sandbox Code Playgroud)

无错误输出。

如果管道基于主分支运行,则返回: 在此输入图像描述 如果管道不基于主分支运行,则返回: 在此输入图像描述

我认为您使用的表达是正确的。您能否测试一下您这边的上述管道 YAML 定义,并让我知道是否仍然有一些错误输出。

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