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.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 发布构建步骤中匹配它。
我建议在每个构建中对源代码进行干净的检查,这将解决在后续构建中遗留旧包文件的问题。
否则会有 $(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)。
我将内部版本号格式指定为:
$(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.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 发布构建步骤中匹配它。
我建议在每个构建中对源代码进行干净的检查,这将解决在后续构建中遗留旧包文件的问题。
否则会有 $(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)。