首页 > 解决方案 > Azure Pipelines:为什么我的变量不使用“键:值”语法设置,而是使用“名称,值”语法设置?

问题描述

我试图更改定义变量的语法,但不再设置变量。我认为如果我还使用变量组或模板,我只需要使用“名称,值”语法而我没有,所以我想使用“键:值”语法,因为它更具可读性。

但是,当我切换到更易读的语法时Private.RevisionVersion,并没有设置pythonPackageVersion、 和nugetPackageVersion变量(如第一个代码片段的输出所示)。

“键:值”语法(不工作):

variables:
  Private.MajorMinorVersion: 1.2
  
  isFinalRelease: false
  isReleaseCandidate: false
  isAlpha: true

  ${{ if eq(variables['isFinalRelease'], 'true') }}:
    Private.RevisionVersion: $[counter(variables['Private.MajorMinorVersion'], 0)]
    pythonPackageVersion: $[format('{0}.{1}', variables['Private.MajorMinorVersion'], variables['Private.RevisionVersion'])]
    nugetPackageVersion: $[format('{0}.{1}', variables['Private.MajorMinorVersion'], variables['Private.RevisionVersion'])]
  ${{ if eq(variables['isReleaseCandidate'], 'true') }}:
    Private.RevisionVersion: $[counter(format('{0}rc', variables['Private.MajorMinorVersion']), 1)]
    pythonPackageVersion: $[format('{0}rc{1}', variables['Private.MajorMinorVersion'], variables['Private.RevisionVersion'])]
    nugetPackageVersion: $[format('{0}.{1}-rc', variables['Private.MajorMinorVersion'], variables['Private.RevisionVersion'])]
  ${{ if eq(variables['isAlpha'], 'true') }}:
    Private.RevisionVersion: $[counter(format('{0}a', variables['Private.MajorMinorVersion']), 1)]
    pythonPackageVersion: $[format('{0}a{1}', variables['Private.MajorMinorVersion'], variables['Private.RevisionVersion'])]
    nugetPackageVersion: $[format('{0}.{1}-a', variables['Private.MajorMinorVersion'], variables['Private.RevisionVersion'])]

jobs:
  - job: Echo_Variables
    steps:
      - script: echo $(Private.MajorMinorVersion) $(isFinalRelease) $(isReleaseCandidate) $(isAlpha)
      - script: echo $(Private.RevisionVersion) $(pythonPackageVersion) $(nugetPackageVersion)

输出:

echo 1.2 False False True
echo $(Private.RevisionVersion) $(pythonPackageVersion) $(nugetPackageVersion)

Private.RevisionVersion和变量未设置pythonPackageVersionnugetPackageVersion


“名称,值”语法(工作):

variables:
  - name: Private.MajorMinorVersion
    value: 1.2

  - name: isFinalRelease
    value: false

  - name: isReleaseCandidate
    value: false

  - name: isAlpha
    value: true

  - name: Private.RevisionVersion
    ${{ if eq(variables['isFinalRelease'], 'true') }}:
        value: $[counter(variables['Private.MajorMinorVersion'], 0)]
    ${{ if eq(variables['isReleaseCandidate'], 'true') }}:
        value: $[counter(format('{0}rc', variables['Private.MajorMinorVersion']), 1)]
    ${{ if eq(variables['isAlpha'], 'true') }}:
        value: $[counter(format('{0}a', variables['Private.MajorMinorVersion']), 1)]
    
  - name: pythonPackageVersion
    ${{ if eq(variables['isFinalRelease'], 'true') }}:
        value: $[format('{0}.{1}', variables['Private.MajorMinorVersion'], variables['Private.RevisionVersion'])]
    ${{ if eq(variables['isReleaseCandidate'], 'true') }}:
        value: $[format('{0}rc{1}', variables['Private.MajorMinorVersion'], variables['Private.RevisionVersion'])]
    ${{ if eq(variables['isAlpha'], 'true') }}:
        value: $[format('{0}a{1}', variables['Private.MajorMinorVersion'], variables['Private.RevisionVersion'])]
        
  - name: nugetPackageVersion
    ${{ if eq(variables['isFinalRelease'], 'true') }}:
        value: $[format('{0}.{1}', variables['Private.MajorMinorVersion'], variables['Private.RevisionVersion'])]
    ${{ if eq(variables['isReleaseCandidate'], 'true') }}:
        value: $[format('{0}.{1}-rc', variables['Private.MajorMinorVersion'], variables['Private.RevisionVersion'])]
    ${{ if eq(variables['isAlpha'], 'true') }}:
        value: $[format('{0}.{1}-a', variables['Private.MajorMinorVersion'], variables['Private.RevisionVersion'])]

jobs:
  - job: Echo_Variables
    steps:
      - script: echo $(Private.MajorMinorVersion) $(isFinalRelease) $(isReleaseCandidate) $(isAlpha)
      - script: echo $(Private.RevisionVersion) $(pythonPackageVersion) $(nugetPackageVersion)

输出:

echo 1.2 False False True
echo 1 1.2a1 1.2.1-a

据我所知,这些在语义上是相同的。我错过了什么?

标签: azure-devopsyamlazure-pipelinesazure-pipelines-yaml

解决方案


如果我们切换条件如下:

variables:
  Private.MajorMinorVersion: 1.2
  
  isFinalRelease: false 
  isReleaseCandidate: false 
  isAlpha: true

  ${{ if eq(variables['isFinalRelease'], 'true') }}:
    Private.RevisionVersion: $[counter(variables['Private.MajorMinorVersion'], 0)]
    pythonPackageVersion: $[format('{0}.{1}', variables['Private.MajorMinorVersion'], variables['Private.RevisionVersion'])]
    nugetPackageVersion: $[format('{0}.{1}', variables['Private.MajorMinorVersion'], variables['Private.RevisionVersion'])]
  ${{ if eq(variables['isAlpha'], 'true') }}:
    Private.RevisionVersion: $[counter(format('{0}a', variables['Private.MajorMinorVersion']), 1)]
    pythonPackageVersion: $[format('{0}a{1}', variables['Private.MajorMinorVersion'], variables['Private.RevisionVersion'])]
    nugetPackageVersion: $[format('{0}.{1}-a', variables['Private.MajorMinorVersion'], variables['Private.RevisionVersion'])]
  ${{ if eq(variables['isReleaseCandidate'], 'true') }}:
    Private.RevisionVersion: $[counter(format('{0}rc', variables['Private.MajorMinorVersion']), 1)]
    pythonPackageVersion: $[format('{0}rc{1}', variables['Private.MajorMinorVersion'], variables['Private.RevisionVersion'])]
    nugetPackageVersion: $[format('{0}.{1}-rc', variables['Private.MajorMinorVersion'], variables['Private.RevisionVersion'])]

jobs:
  - job: Echo_Variables
    steps:
      - script: echo $(Private.MajorMinorVersion) $(isFinalRelease) $(isReleaseCandidate) $(isAlpha)
      - script: echo $(Private.RevisionVersion) $(pythonPackageVersion) $(nugetPackageVersion)

输出:

echo 1.2 False False True
echo 1 1.2a1 1.2.1-a

根据测试结果,它似乎不会运行最新的条件,它只会运行前两个条件。

我已向开发者社区报告此问题,您可以关注此以获取最新消息,如果有任何更新,我会在这里更新。


推荐阅读