0

我正在尝试创建一个 Azure 构建管道,其中内部版本号由 Powershell 生成。所以我有这两个任务:

steps:
- powershell: |
   $env:NugetVersion = $env:BUILD_SOURCEBRANCHNAME;
   
   if ($env:BUILD_SOURCEBRANCHNAME.StartsWith("dev-") -eq $true) {
       $env:NugetVersion = $env:BUILD_SOURCEBRANCHNAME.SubString(4) + "." + (Get-Date).Ticks / 1000
   }
  displayName: 'PowerShell Script'

steps:
- task: NuGetCommand@2
  displayName: 'NuGet pack'
  inputs:
    command: pack
    configuration: Release
    versioningScheme: byEnvVar
    versionEnvVar: NugetVersion

我只是在 powershell 脚本中定义环境变量“NugetVersion”,然后尝试在“NuGet pack”命令中使用它。我不使用 $ 或 $env 或其他任何东西,如 Azure UI 中的工具提示中所述,但结果始终相同:

##[错误]未找到提供的环境变量的值。

在执行管道之前,我是否必须在某处预先创建此变量?请注意,我尝试Write-Host将变量的值作为脚本的最后一行并输出正确的值,所以我真的不明白 NuGet 任务如何告诉我它没有找到该变量。

4

1 回答 1

1

所以我真的不明白 NuGet 任务为什么告诉我它没有找到变量。

那是因为管道中的任务无法直接识别环境变量。

我们需要使用Logging 命令在 Inline powershell 任务的最后一行设置这个变量:

Write-Host ("##vso[task.setvariable variable=NugetVersion]$env:NugetVersion")

在这种情况下,下一个任务可以使用 this 变量。

现在,我可以使用命令行任务来显示它:

echo $(NugetVersion)

在此处输入图像描述

但是,另一个问题是不能将变量设置为包版本,因为它不符合包版本的指定规则,包版本需要符合Semantic Versioning 2.0.0。如果我们使用该变量,我们将得到以下错误:

The nuget command failed with exit code(1) and error(Version string specified for package reference 'er.637402549809904' is invalid.

在此处输入图像描述

因此,如果您提供的 powershell 脚本是您的真实脚本,您可能还需要重新考虑如何获取有效的包版本。

顺便说一句,对于$env:NugetVersion = $env:BUILD_SOURCEBRANCHNAME;,您似乎将分支名称而不是数字设置为 nuget 版本,这似乎不合理,您可能需要确认这一点。

于 2020-11-06T02:47:18.637 回答