VSO Build vNext - Nuget包构建步骤 - 将版本号用于版本包

时间:2015-11-11 10:43:13

标签: nuget azure-devops azure-pipelines

我的构建号格式指定为:

$(BuildDefinitionName)_$(Year:yyyy).$(Month).$(DayOfMonth)$(Rev:.r)

这将以“BuildDefinitionName_2015.11.11.1”

的格式创建构建号码

修订版似乎是当天构建运行的次数。

我希望能够在进一步的构建步骤中使用此值。

例如,我正在使用nuget packager步骤创建一个nuget包,并使用“使用内部版本编号来对软件包进行版本化”选项

这会创建类似于“PackageName.2015.11.11.1.nupkg”

的包

然后我想使用nuget发布者构建步骤来发布它,但问题是随着时间的推移,你会在包文件夹中获得多个包,而nuget发布者步骤会使用模式来匹配要发布的包。

  • “PackageName.2015.11.11.1.nupkg”
  • “PackageName.2015.11.11.2.nupkg”
  • “PackageName.2015.11.11.3.nupkg”

如果没有明确要发布的文件,发布者步骤将发布所有这些文件。

我不想要这个,我只是希望它发布与当前版本号匹配的文件。

所以我希望能够在模式中设置内部版本号部分。

PackageName.$(Year:yyyy).$(Month).$(DayOfMonth)$(Rev:.r).nupkg

但似乎这些变量在搜索路径中没有被替换,而是作为文字匹配而来。

似乎很奇怪,在nuget包中,它为您提供了按内部版本号创建包的选项,但是后来不允许您在nuget发布构建步骤中匹配它。

2 个答案:

答案 0 :(得分:3)

Nuget Packager步骤使用PowerShell脚本获取内部版本号。源代码位于:https://github.com/Microsoft/vso-agent-tasks/blob/84746169f19b7c3e3f67c0efa1a546c4107055fa/Tasks/NugetPackager/NuGetPackager.ps1

如果您确实要将内部版本号转移到Nuget Publish,则可以在构建过程中添加PowerShell步骤以获取构建版本号。有关详细信息,请参阅源代码中的构建版本相关代码。

在PowerShell脚本的最后,添加代码:

Write-Host "##vso[task.setvariable variable=bversion;]$NewVersion"

此代码创建一个填充了版本号的变量“bversion”。然后,您可以在Nuget Publish步骤中使用变量$(bversion)。

答案 1 :(得分:0)

我建议在每个版本中对源代码进行干净的检查,这将解决在后续版本中包含旧包文件的问题。

否则,$(build.buildnumber)变量包含内部版本号的扩展值,但只要您在内部版本号中另外包含$(BuildDefinitionName),您就不会能够将它用作文件名。有关可用预定义变量的列表,请参阅here