Nuget包版本控制&从CI推广到生产Nuget饲料

时间:2017-11-03 21:30:07

标签: tfs continuous-integration nuget proget

技术:

Proget - Nuget包管理服务器

TFS - 2017年更新1前提

问题: 当从TFS版本重新发布构建时,要重新打包已经转到我的Proget开发源的CI Nuget软件包,似乎没有办法获得自动Semantic versioning。 有关在Nuget包装程序设置中设置版本的帮助对话框如下所示。

  

使用日期和时间如果您选择'使用日期和时间',这将   生成符合SemVer标准的版本,格式为X.Y.Z-ci-datetime   你选择X,Y和Z的地方。

     

使用环境变量如果选择“使用环境”   变量',您必须选择一个环境变量并确保它   包含您要使用的版本号。

     

使用内部版本号如果您选择'使用内部版本号',则会这样做   使用内部版本号来打包。注意:在常规设置下   构建格式   ' $(BuildDefinitionName)_ $。(年份:YYYY)$(月)$(DAYOFMONTH)$(启:.R)

enter image description here

我希望能够重新发布从我的TFS中的CI构建到我的Proget开发源的Nuget包,再到我的生产Proget源。微软在Versioning NuGet packages in a continuous delivery world上有一篇很棒的文章。在那篇文章中,他们避免了他们正在做类似的事情,但他们没有为如何完成提供任何真正的指导。

问题:

如何配置Nuget打包器,以便在创建包时输入构建变量?或者有没有一种方法可以设置主要版本,每次只有次要增量?其他人如何处理从开发到生产的包装推广?

尝试过以下操作:

尝试$(版本)作为构建&发布变量,它似乎不起作用。包裹被标记日期。此外,这似乎只在TFS的构建部分中真正起作用,其中模态窗口包含修改此值的点。

尝试使用日期&时间方法,它将CI粘贴到构建号中。这几乎正​​是我们想要的减去CI定义。因为它会自动插入CI,所以不适合生产。

关闭它并从Nuspec中提取版本,但是这会假设在您的CI构建中,在推送上一版本后,您总是将版本号增加到当前版本。这是因为nuspec位于您通过TFS版本链重新发布的构建文件中。很难说最少。

使用内部编号设置为$(BuildDefinitionName) $(年份:yyyy)。$(月)。$(DayOfMonth)$(Rev:.r)我在这里想要的是$(主要) $(未成年人)。$(补丁)。试用版本为1.0.0的$(Version) $可以获得一个名为2017.11.3.1作为输出的文件,似乎忽略了$(Version)变量。

1 个答案:

答案 0 :(得分:0)

不确定我是否完全理解你的观点,似乎你想在TFS上进行ci处理后创建一个语义版本的nupkg。

通常,nupkg应如MSVersioningSample所示:1.0.8-ci-20171106-156033.nupkg

但是你想重命名nupgk并将其重新发布到nuget服务器作为发布版本只是MSVersioningSample:1.0.8.nupkg与$(Major)相同。$(次要)。$(补丁)。

您需要在构建代理中修改NuGetPackager.ps1,更改$VersionRegex值,您可以在此问题中查看答案的详细信息:How do I get TFS 2015 to parse 3 digit versioning for NuGet packaging

还尝试使用一些第三方扩展来处理TFS构建中的语义版本控制,发布任务,nuget包,示例供您参考:Semantic Versioning Build and Release Tasks

除了注释之外:Semantic Versioning 2.0.0仅支持NuGet 4.3.0+和Visual Studio 2017版本15.3 +。