繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM