Использовать переменную отметки времени в конвейере Azure DevOps

Aug 17 2020

Я застрял в использовании переменных сборки в конвейерах Azure DevOps.

Чего я пытаюсь достичь: создать переменную с текущей меткой времени и использовать эту переменную для установки имени сборки и версии артефакта (для отслеживания).

В моей текущей конфигурации сценарий powershell выполняется успешно, но переменная foo пуста на шаге npm (см. Код yml ниже).

variables:
  system.debug: true

name: $(TeamProject)_$(Build.DefinitionName)_$(SourceBranchName)_$(Date:yyyyMMdd)-$(Hours)$(Minutes)$(Seconds) [...] steps: - task: PowerShell@2 inputs: targetType: 'inline' script: 'Write-Host "Setting up the date time for build variable" $date=$(Get-Date -format yyyyMMdd-Hmmss) Write-Host "##vso[task.setvariable variable=foo]$date"'

- task: Npm@1
  inputs:
    command: 'custom'
    customCommand: '--no-git-tag-version version prerelease --preid=dev-$(foo)'
  displayName: 'npm version prerelease'

Мои вопросы: почему переменная foo (введенная в powershell) пуста на шаге npm? Есть ли способ установить имя сборки с помощью собственной переменной foo (чтобы использовать одну и ту же метку времени для имени сборки и версии артефакта)?

Ответы

1 PatrickLu-MSFT Aug 18 2020 at 16:54

Вы используете неправильный формат конвейера YAML. Вы можете использовать нижеприведенный фрагмент:

steps:
- powershell: |
   Write-Host "Setting up the date time for build variable"
   $date=$(Get-Date -format yyyyMMdd-Hmmss)
   Write-Host "##vso[task.setvariable variable=foo]$date"
  displayName: 'PowerShell Script'

Затем эта переменная foo должна быть успешно введена с помощью powershell. Вы увидите, как он расширяется в следующей задаче npm.