如何集成Gitversion

How to integrate Gitversion

我想在我的 ASP.NET 项目中集成一个自动版本控制系统。对于每个版本,它都应该有一个基于前一个版本的版本号。我打算整合 Gitversion https://gitversion.net/。有人在你的项目中使用它吗?对于 CI/CD 管道,我们部署了 teamcity 和章鱼。

自动化软件发布版本的最佳做法是什么?

提前致谢

作为 GitVersion 的维护者之一,我显然有偏见,但既然你问的是如何使用 GitVersion 来实现“自动化软件发布的最佳实践” ,我要厚颜无耻地给你一个talk I've done on how I prefer to version and release software with GitVersion, TeamCity and Octopus Deploy.

的文字说明

开发人员工作流程

您首先应该弄清楚您的软件需要什么样的开发人员工作流程。 Git版本支持 Git Flow and many simplified variants of it, and GitHub Flow (as well as many other trunk based development 流)。您应该选择哪种工作流程取决于您正在开发的软件类型、您的团队,最重要的是;您的个人喜好。

一旦您选择了您的工作流程,您就可以配置在哪个 mode Git 版本下运行。

版本来源

GitVersion 通过从您的 Git 存储库计算版本号来工作。这意味着您不应以任何形式向 Git 提交版本号。不在 package.jsonpom.xml.csproj 或任何其他通常要求存在版本号的构建或 project-related 文件中。

版本控制

相反,您应该允许 GitVersion 根据 Git 历史记录生成版本号,使用当前签出的提交作为其起点,并搜索父项及其标签为当前提交计算适当的版本号。然后可以在构建管道中以任何方式使用此版本号。例如,您可以通过执行以下命令将 Git 版本的 FullSemVer variable 写入 package.json

npm version $GitVersion_FullSemVer

如果您在 .NET 平台上开发,也可以使用 GitVersion to patch your AssemblyInfo.cs files so the calculated version number is compiled into your assemblies. With InformationalVersion 包含正在构建和版本化的 Git 提交的 SHA,您将能够确定确切的已编译程序集的来源。

建造

一旦您的工作流程井井有条,并且 GitVersion 拥有可用于其版本控制的良好信息源,您就可以继续为您的软件创建构建管道。典型的构建管道看起来像这样:

  1. git clone。 (确保克隆是完整的,而不是浅的或分离的 HEAD。有关详细信息,请参阅 requirements。)
  2. Git版本。执行Git版本 whichever means make most sense to your environment.
  3. 补丁。将步骤 2 中由 GitVersion 创建的版本号修补到存储库中每个有意义的文件中,例如 AssemblyInfo.cspackage.json
  4. 构建。执行软件构建。
  5. 测试。 运行 确保软件质量的测试。
  6. 。使用步骤 2 中 GitVersion 创建的版本号创建软件包。
  7. 发布。使用您选择的包管理软件发布包,例如 Octopus Deploy、npmnugetcomposer 或类似软件。
  8. 测试。如果可能,对已发布的软件执行自动测试。如果成功,可以自动 promote the released software 到其他环境(如果适用)。
例如,

通过 GitVersion's built-in support for build servers, the calculated version number will also be promoted to the build server to version the build itself. This will be done automatically on TeamCity。在 TeamCity 中,我建议您 运行 GitVersion 作为它自己的构建配置公开所需的变量,这些变量稍后可以在依赖的构建配置中使用。

发布

一旦您拥有包含由 GitVersion 生成的版本号的构建工件,您可以在 Octopus Deploy 中使用与 create a package, create a release and deploy the release 相同的版本号。

您说过要集成一个自动版本控制系统?我想把我的帽子扔进戒指。

我是 Vernuntii 的作者,这是一个具有 git 集成的简单语义版本控制库。

@Asbjørn 的回答已经告诉您最佳实践,例如选择适合您项目的工作流程。

GitVesion 或 Vernuntii 等版本控制工具的主要部分是根据(不)现有的 git 标签生成合适的下一个版本。

所以归根结底,你想要什么样的复杂度是个人喜好的问题。下一个版本是如何计算的。

所以当你想要 cross-branch 版本控制时,你最好使用 GitVersion,但如果你不需要那种复杂性,那么你可以像现在这样尝试 single-branch 版本控制在 Vernuntii.

实施

有关更多信息,请查看 Vernuntii 的 README.md

这里,为了让大家了解一下我对版本控制工具的印象及其复杂程度,给大家列一个清单(从最复杂到最复杂排序):

  • 最小版本
  • 紫红色
  • 春节
  • Nerdbank.GitVersioning
  • Git 版本

一个有趣的事实:从 top 到 Vernuntii 的所有库也允许从分离的 HEAD 计算下一个版本。