首页 > 解决方案 > 使用 GIT 存储库 (MAJOR.MINOR.COMMIT_NUMBER) 对软件版本进行版本控制的最佳方法是什么?

问题描述

我正在使用 Jenkins 运行构建和运行测试。我正在从 SVN 迁移到 Git。目前,我使用 MAJOR.MINOR.SVN_REVISION 格式的版本软件。

例如,MAJOR 和 MINOR 来自 Java 项目和库的 pom.xml

...
<groupId>com.example.ci</groupId>
<artifactId>test-java-project</artifactId>
<version>2.1</version>
<packaging>jar</packaging>
...

构建 Java 应用程序/软件时,我将 SVN 修订版添加到版本中。例如,如果构建的 SVN 版本是 123,那么完整版本将是 2.1.123。这很好用。

我不能对 Git 使用相同的逻辑,因为 Git 提交号是一个哈希号,它不是连续的。例如:2.1.a126ac21090

当我需要使用版本号识别最新的库和应用程序时,这将导致问题。

第一个选项是使用 Jenkins 内部版本号 (MAJOR.MINOR.JENKINS_BUILD_NUMBER) 但这也有一些缺点,例如让生产和暂存 Jenkins 为两个不同的工件生成相同的版本号。

第二个选项是使用“git rev-list --count”,但这可能会为两个不同的功能分支返回相同的数字,我最终可能会得到两个具有相同版本号的不同工件。

是否有另一种更好的方法来使用 Git 对类似于 MAJOR.MINOR.SVN_REVISION 的软件进行版本控制?

标签: gitjenkinssvnbuildartifacts

解决方案


你仍然可以保留你的标签,但也可以生成一个带有 Git 修订 ID 的属性文件。

请参阅git-commit-id/maven-git-commit-id-plugin将自动化该过程的 Maven 插件的示例。
请参阅Maven 中心

Maven 插件,它将构建时 git 存储库信息包含在 POJO /*.properties中。
让您的应用程序告诉您它们是从哪个版本构建的!


推荐阅读