【问题标题】:How to integrate Gitversion如何集成 Gitversion
【发布时间】:2022-04-25 04:03:29
【问题描述】:

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

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

提前致谢

    标签: teamcity versioning gitversion


    【解决方案1】:

    作为 GitVersion 的维护者之一,我显然是有偏见的,但是既然你问如何使用 GitVersion 来实现“自动化软件发布的最佳实践”,我将毫不避讳地给你一个文字描述 @ 987654321@。

    开发人员工作流程

    您首先应该弄清楚您的软件需要什么样的开发人员工作流程。 GitVersion 支持Git Flow 及其许多简化变体,以及GitHub Flow(以及许多其他trunk based development 流)。您应该选择哪种工作流程取决于您正在开发的软件类型、您的团队,最重要的是;你的个人喜好。

    选择工作流程后,您可以配置应在哪个 mode GitVersion 下运行。

    版本源

    GitVersion 通过计算 Git 存储库中的版本号来工作。这意味着你不应该以任何形式向 Git 提交版本号。不在package.jsonpom.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 有一个很好的信息来源可用于其版本控制,您就可以继续为您的软件创建构建管道。典型的构建管道将如下所示:

    1. git clone. (确保克隆是完整的并且不是浅的或分离的HEAD。有关更多信息,请参阅requirements。)
    2. 版本号.通过whichever means make most sense to your environment 执行 GitVersion。
    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,计算出来的版本号也会被提升到构建服务器上,对构建本身进行版本化。例如,这将在TeamCity 上自动完成。在 TeamCity 中,我建议您将 GitVersion 作为其自己的构建配置运行,从而公开所需的变量,这些变量随后可以在依赖的构建配置中使用。

      发布

      一旦你有一个包含 GitVersion 生成的版本号的构建工件,你可以在 Octopus Deploy 中使用与create a packagecreate a releasedeploy the release 相同的版本号。

    【讨论】:

      【解决方案2】:

      你告诉过你想要集成一个自动版本控制系统?我想把我的帽子扔进擂台。

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

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

      GitVesion 或 Vernuntii 等版本控制工具的主要部分是基于(非)现有的 git 标签生成合适的 NEXT VERSION。

      因此,归根结底,您想要什么样的复杂性如何计算下一个版本是一个品味问题。

      因此,当您想要跨分支版本控制时,最好使用 GitVersion,但如果您不需要那种复杂性,那么您可以尝试像 Vernuntii 中实现的单分支版本控制。

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

      在这里,为了让您对版本控制工具及其复杂性有个印象,让我给您一个列表(从最复杂到最复杂排序):

      • 最小版本
      • 维莱特
      • 蚯蚓
      • Nerdbank.GitVersioning
      • Git 版本

      除此之外还有一个有趣的事实:从顶部到 Vernuntii 的所有库也允许从分离的 HEAD 计算下一个版本。

      【讨论】:

        猜你喜欢
        • 2021-01-01
        • 1970-01-01
        • 2019-06-24
        • 2022-10-25
        • 2022-08-22
        • 1970-01-01
        • 2021-06-27
        • 2016-11-13
        • 2022-10-25
        相关资源
        最近更新 更多