在Azure Devops管道中使用timestamp变量

问题描述

我一直坚持在天蓝色的devops管道中使用构建变量。

我想要实现的目标:使用当前时间戳创建变量,并使用此变量设置构建名称和工件版本(以实现可追溯性)。

在当前配置中,powershell脚本已成功执行,但在npm步骤中,变量foo为空(请参见下面的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'

我的问题:为什么在npm步骤中变量foo(由powershell引入)为空?有没有办法使用自我引入的变量foo设置构建名称(对构建名称和工件版本使用相同的时间戳)?

解决方法

您使用的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'

然后应该使用powershell成功地引入此foo变量。您将在Follow npm任务中看到它的扩展。

enter image description here