【发布时间】:2022-04-25 04:03:29
【问题描述】:
我想在我的 ASP.NET 项目中集成一个自动版本控制系统。对于每个版本,它都应该有一个基于先前版本的版本号。我计划集成 Gitversion https://gitversion.net/。有人在你的项目中使用它吗?对于 CI/CD 管道,我们部署了 teamcity 和 octopus。
自动化软件发布版本的最佳实践是什么?
提前致谢
标签: teamcity versioning gitversion
我想在我的 ASP.NET 项目中集成一个自动版本控制系统。对于每个版本,它都应该有一个基于先前版本的版本号。我计划集成 Gitversion https://gitversion.net/。有人在你的项目中使用它吗?对于 CI/CD 管道,我们部署了 teamcity 和 octopus。
自动化软件发布版本的最佳实践是什么?
提前致谢
标签: teamcity versioning gitversion
作为 GitVersion 的维护者之一,我显然是有偏见的,但是既然你问如何使用 GitVersion 来实现“自动化软件发布的最佳实践”,我将毫不避讳地给你一个文字描述 @ 987654321@。
您首先应该弄清楚您的软件需要什么样的开发人员工作流程。 GitVersion 支持Git Flow 及其许多简化变体,以及GitHub Flow(以及许多其他trunk based development 流)。您应该选择哪种工作流程取决于您正在开发的软件类型、您的团队,最重要的是;你的个人喜好。
选择工作流程后,您可以配置应在哪个 mode GitVersion 下运行。
GitVersion 通过计算 Git 存储库中的版本号来工作。这意味着你不应该以任何形式向 Git 提交版本号。不在package.json、pom.xml、.csproj 或任何其他通常要求存在版本号的构建或项目相关文件中。
相反,您应该允许 GitVersion 根据 Git 历史记录生成版本号,使用当前签出的提交作为其起点,并搜索父级及其标签以计算当前提交的适当版本号。然后可以在构建管道中以任何您想要的方式使用此版本号。例如,您可以通过执行以下命令将 GitVersion 的 FullSemVer variable 写入 package.json:
npm version $GitVersion_FullSemVer
如果您在.NET 平台上进行开发,也可以使用GitVersion to patch your AssemblyInfo.cs files,以便将计算出的版本号编译到您的程序集中。使用包含正在构建和版本控制的 Git 提交的 SHA 的 InformationalVersion,您将能够识别已编译程序集的确切来源。
一旦您的工作流程井井有条,并且 GitVersion 有一个很好的信息来源可用于其版本控制,您就可以继续为您的软件创建构建管道。典型的构建管道将如下所示:
git clone. (确保克隆是完整的并且不是浅的或分离的HEAD。有关更多信息,请参阅requirements。)AssemblyInfo.cs、package.json 等。npm、nuget、composer 或类似软件。通过GitVersion's built-in support for build servers,计算出来的版本号也会被提升到构建服务器上,对构建本身进行版本化。例如,这将在TeamCity 上自动完成。在 TeamCity 中,我建议您将 GitVersion 作为其自己的构建配置运行,从而公开所需的变量,这些变量随后可以在依赖的构建配置中使用。
一旦你有一个包含 GitVersion 生成的版本号的构建工件,你可以在 Octopus Deploy 中使用与create a package、create a release 和deploy the release 相同的版本号。
【讨论】:
你告诉过你想要集成一个自动版本控制系统?我想把我的帽子扔进擂台。
我是Vernuntii 的作者,这是一个带有 git 集成的简单语义版本控制库。
@Asbjørn 的回答已经告诉您最佳实践,例如选择适合您项目的工作流程。
GitVesion 或 Vernuntii 等版本控制工具的主要部分是基于(非)现有的 git 标签生成合适的 NEXT VERSION。
因此,归根结底,您想要什么样的复杂性如何计算下一个版本是一个品味问题。
因此,当您想要跨分支版本控制时,最好使用 GitVersion,但如果您不需要那种复杂性,那么您可以尝试像 Vernuntii 中实现的单分支版本控制。
有关更多信息,请查看 Vernuntii 的README.md。
在这里,为了让您对版本控制工具及其复杂性有个印象,让我给您一个列表(从最复杂到最复杂排序):
除此之外还有一个有趣的事实:从顶部到 Vernuntii 的所有库也允许从分离的 HEAD 计算下一个版本。
【讨论】: