RUDE

Конвейер Azure использует выражение, а не значение

Я использую следующий лазурный конвейер (он упрощен для тестирования):

parameters:
  - name: BUILD_QUALITY
    displayName: What is the build quality?
    type: string
    default: "alpha"
    values:
      - alpha
      - beta
      - preview
      - release

trigger: none

variables:
  solution: "**/*.sln"
  buildPlatform: 'Any CPU'
  buildConfiguration: "Release"
  patch: $[counter(variables['CustomVersion'], 1)]
  versionNumber: $(Year:yyyy).$(Month).$(DayOfMonth)
  ${{ if eq( parameters['BUILD_QUALITY'], 'release') }}:
    VERSION_NUMBER: ${{ variables.versionNumber }}.$(patch)
  ${{ else }}:
    VERSION_NUMBER: ${{ variables.versionNumber }}.$(patch)-${{parameters['BUILD_QUALITY']}}

name: Test_${{ variables.versionNumber }}.$(patch)

pool:
  vmImage: "windows-latest"

stages:
  - stage: buildCliTool

    jobs:
      - job: cliTool
        steps:
          - script: echo "versionNumber is ${{ variables.versionNumber }}"
          - script: echo "Build name is $(Build.BuildNumber)"

          
  - stage: buildNuget

    jobs:
      - job: nuget
        steps:
          - script: echo "versionNumber is $(versionNumber)"
          - script: echo "versionNumber is $(VERSION_NUMBER)"
  

Шаги скрипта используются для проверки правильности значений переменных. Но они печатают правильное значение только для выражения - script: echo "Build name is $(Build.BuildNumber)"

Конвейер Azure использует выражение, а не значение

Во всех остальных случаях выводом является не значение, а само выражение.

Конвейер Azure использует выражение, а не значение

Я хотел бы использовать versionNumber на своих этапах, но теперь он не имеет должного значения. Может ли кто-нибудь предложить, пожалуйста, как мне использовать эту переменную для получения значения, а не тела выражения?


19
1

Ответ:

Решено

Проблема с токенами, которые вы используете в этой переменной:

versionNumber: $(Year:yyyy).$(Month).$(DayOfMonth)

Эти токены год, месяц и день месяца — вы не можете использовать их в обычных переменных, только когда определение номера сборки:

You can use these tokens only to define a run number; they don't work anywhere else in your pipeline.