使用 TeamCity 合并语义版本控制的最佳实践是啥

Posted

技术标签:

【中文标题】使用 TeamCity 合并语义版本控制的最佳实践是啥【英文标题】:What's the Best Practice for incorporate Semantic Versioning using TeamCity使用 TeamCity 合并语义版本控制的最佳实践是什么 【发布时间】:2012-09-11 07:46:37 【问题描述】:

TeamCity 是一个很棒的 CI 工具,我们也使用 Semantic Versioning 来管理我们的 DLL 版本很长一段时间,现在我们正在达成将 TeamCity 和 Semantic Versioning 集成在一起的想法,同时我们对此主题进行了一些研究,比方说版本信息如

MajorVersion.MinorVersion.PatchVersion.BuildNumber

我们始终使用 teamcity buildnumber 的 buildNumber,以及我们在 assemblyinfo.cs 中维护的其他 3 个版本 这里的问题是 - 我们如何使用 teamcity 将其内部版本号输入到 assemblyinfo.cs,我可以找到 Msbuild 支持这个参数,并且有任何最佳实践来处理同样的事情吗?我们还希望将整个版本作为发布的版本信息提供给我们的开发人员的 nuget 包

非常感谢

【问题讨论】:

Gary,你最终选择了哪个方向?我开始走类似的道路。 【参考方案1】:

我试图在本文中描述适合我的方法。 http://www.developerfusion.com/article/144809/continuous-integration-using-nuget-and-teamcity/

注意 NuGet 不完全(还)支持 SemVer,例如PrereleaseTags 结合内部版本号不会按您期望的方式工作。我在Top 10 NuGet (Anti-)Patterns on MSDN 中描述了一些关于版本控制的指导。

【讨论】:

【参考方案2】:

您可以使用 AssemblyInfo Patcher 功能。构建功能在构建配置设置的构建步骤页面上配置。它记录在here。如果您将 AssemblyInfo 保存在非标准位置,您可以使用 MSBuild community task AssemblyInfo 通过 msbuild 重写它。

【讨论】:

【参考方案3】:

TeamCity meta-runners power pack (https://github.com/JetBrains/meta-runner-power-pack) 中有一个非常完整的 SemVer Build Number meta-runner。

以下是作者对功能的描述: http://johanleino.wordpress.com/2013/10/11/teamcity-meta-runner-semantic-version-build-number/

SemVer Build Number 元运行程序是基于 PowerShell 的运行程序。它可以(在此发布时):

从 nuspec (nuget) 文件中获取版本号。 使用手动版本号(如果需要,可以使用参数)。覆盖其他方法。 包括 TeamCity 构建计数器。 包括 VCS 修订版。 将 Git 提交哈希转换为短哈希。 如果需要,请忽略构建元数据。 日志等

【讨论】:

【参考方案4】:

这是我写的一篇博客文章,介绍了如何从 AssemblyInfo.cs 的前两个数字为 C# .Net 项目创建版本号,并添加构建计数器和分支名称以形成完整的版本号。可以很容易地针对其他情况进行修改,它只是带有文件内容替换器构建功能的脚本。

http://www.meadow.se/wordpress/generating-semantic-version-build-numbers-in-teamcity/

希望这会有所帮助。

【讨论】:

以上是关于使用 TeamCity 合并语义版本控制的最佳实践是啥的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Jenkins 上处理语义版本控制

不同版本间 Git 合并的最佳实践

SVN 分支及合并的介绍和实践---命令行

最佳实践:软件版本控制 [关闭]

使用语义发布获取下一个标签版本

使用 WCF 对服务进行版本控制的最佳实践?