我正在尝试创建一个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任务告诉我如何找不到变量。
答案 0 :(得分:1)
所以我不太了解NuGet任务告诉我它找不到变量。
那是因为管道中的任务无法直接识别环境变量。
我们需要使用Logging Command在Inline powershell任务的最后一行中设置此变量:
a=['alone,1', 'amazed,10', 'bad,1', 'best,10', 'better,10', 'excellent,10', 'excite,10', 'good,7', 'great,7', 'happy,10', 'hard,5', 'hardest,4', 'hate,1', 'like,7', 'love,10', 'loves,10', 'need,1', 'regret,1', 'sad,1', 'sorry,1', 'thank,5', 'tired,1', 'worst,1']
d={}
for i in a:
d[i.split(',')[0]]=int(i.split(',')[1])
print(d["happy"])
在这种情况下,下一个任务可以使用this变量。
现在,我可以使用命令行任务来显示它:
Write-Host ("##vso[task.setvariable variable=NugetVersion]$env:NugetVersion")
但是,另一个问题是您无法将变量设置为软件包版本,因为它不符合软件包版本的指定规则,并且软件包版本需要符合{{ 3}}。如果使用该变量,则会出现以下错误:
echo $(NugetVersion)
因此,如果您提供的Powershell脚本是您的真实脚本,则可能还需要重新考虑如何获取有效的软件包版本。
顺便说一句,对于The nuget command failed with exit code(1) and error(Version string specified for package reference 'er.637402549809904' is invalid.
,似乎您已将分支设置为名称而不是数字作为nuget版本,这似乎不合理,您可能需要确认这一点。