[英]Use custom environment variable in NuGet pack action of Azure pipeline
我正在尝试创建一个 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 任务如何告诉我它找不到变量。
所以我真的不明白 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版本,这似乎不合理,你可能需要确认一下。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.