VSO Build vNext - Nuget Package Build Step - 使用内部版本号来版本包

VSO Build vNext - Nuget Package Build Step - Use build number to version package

我将内部版本号格式指定为:

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

这会以 "BuildDefinitionName_2015.11.11.1"

的格式创建版本号

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

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

例如,我正在使用 nuget packager 步骤创建一个 nuget 包,并使用选项 "Use build number to version the package"

这为我创建了与此类似的包 "PackageName.2015.11.11.1.nupkg"

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

在不明确发布文件的情况下,发布者步骤将发布所有这些文件。

我不想要这个,我只想发布与当前内部版本号匹配的文件。

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

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

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

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

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

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

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

如果您确实想要将内部版本号传输到 Nuget Publish,您可以在构建过程中添加一个 PowerShell 步骤以获取内部版本号。详见Source Code中构建版本相关代码

并在 PowerShell 脚本的末尾添加代码:

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

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