【问题标题】:Azure Pipelines: Why do my variables not set using the "key: value" syntax but do set with the "name, value" syntax?Azure Pipelines:为什么我的变量不使用“键:值”语法设置,而是使用“名称,值”语法设置?
【发布时间】:2021-04-21 18:05:39
【问题描述】:

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

但是,当我切换到更易读的语法时,Private.RevisionVersionpythonPackageVersionnugetPackageVersion 变量没有被设置(如第一个代码 sn-p 的输出所示)。

“key:value”语法(不工作):

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.RevisionVersionpythonPackageVersionnugetPackageVersion 变量未设置。


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

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-devops yaml azure-pipelines azure-pipelines-yaml


    【解决方案1】:

    如果我们切换条件如下:

    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
    

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

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

    【讨论】:

      【解决方案2】:

      我认为这是失败的,因为 isAlpha 的布尔值是 True,而您将它与字符串 'true' 进行比较。尝试将此表达式用于isAlpha

          ${{ if variables['isAlpha'] }}:
              value: ...
      

          ${{ if eq(variables['isAlpha'], true) }}:
              value: ...
      

      【讨论】:

      • AFAIK,变量总是字符串(只有参数有类型)。第一个选项使模板无效,错误为'Private.RevisionVersion' is already defined 等。第二个选项仍然没有设置变量(可能是因为true'true' 对于变量是相同的)。
      猜你喜欢
      • 2015-09-11
      • 1970-01-01
      • 1970-01-01
      • 2020-11-14
      • 1970-01-01
      • 1970-01-01
      • 2020-06-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多