在Azure管道的NuGet包操作中使用自定义环境变量

时间:2020-11-06 00:50:27

标签: azure powershell azure-pipelines

我正在尝试创建一个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任务告诉我如何找不到变量。

1 个答案:

答案 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")

enter image description here

但是,另一个问题是您无法将变量设置为软件包版本,因为它不符合软件包版本的指定规则,并且软件包版本需要符合{{ 3}}。如果使用该变量,则会出现以下错误:

echo $(NugetVersion)

Semantic Versioning 2.0.0

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

顺便说一句,对于The nuget command failed with exit code(1) and error(Version string specified for package reference 'er.637402549809904' is invalid. ,似乎您已将分支设置为名称而不是数字作为nuget版本,这似乎不合理,您可能需要确认这一点。