背景
在软件包中添加代码版本信息是许多组织使用的管理技巧。
这些信息在很多场景中可以发挥重要作用。
对于一些尚处于混沌状态的萌芽组织来说,这些信息几乎可以在排障过程中发挥灯塔的作用。
组织管理不善会引发很多“人祸”。
软件包覆盖版本发布?代码分支管理方法混乱?代码 tag 覆盖打?系统出了问题,不知道软件包是哪个分支、哪次提交构建的?
一个真实的项目
该项目基于 git 管理代码版本。
之前一直是通过自研的 CI 系统构建;
此 CI 系统会自动获取当前所构建代码的 git 信息,写入文件,添加到最终构建出的软件包中。
后来因为某些外部非技术原因,需要在另一套系统中构建软件包。
为了让最终的软件包包含相关 git 信息,就使用了 Maven 插件 git-commit-id-plugin。
快速使用 git-commit-id-plugin
此 Maven 插件可以从代码目录中的 .git 目录获取相关信息,写入文件。
该文件可以在Maven打包(package)过程中被包含到 jar 包内。
为了方便获取信息,我们可以开放一个接口来呈现此信息文件中的内容。如,一个 HTTP API。
配置 git-commit-id-plugin
在工程的 POM 文件中添加对此插件的引用,并添加一些自定义的配置。
(通常是在程序入口所在 jar包 的 POM 中配置。)
以下示例只是一种常用的快速配置样例,它使用了很多默认值。
如:生成的 git 信息文件路径为:${project.build.outputDirectory}/git.properties
可参考官方文档实现自定义配置。
<project> ... <build> ... <plugins> ... <plugin> <groupId>pl.project13.maven</groupId> <artifactId>git-commit-id-plugin</artifactId> <version>3.0.1</version> <configuration> <generateGitPropertiesFile>true</generateGitPropertiesFile> <includeOnlyProperties> <includeOnlyProperty>^git.branch$</includeOnlyProperty> <includeOnlyProperty>^git.commit.id$</includeOnlyProperty> <includeOnlyProperty>^git.dirty$</includeOnlyProperty> <includeOnlyProperty>^git.build.time$</includeOnlyProperty> </includeOnlyProperties> </configuration> </plugin> </plugins> </build> </project>
添加信息获取接口
上述软件包中的 git 信息获取/发布方式可以有多种实现方案。此处仅提供一种常见的 HTTP API 方式:
@RestController public class InfoController { @GetMapping("/git_info") public String getGitInfo() throws Exception { // 直接将 git 信息文件的内容返回给客户端 return IOUtils.toString(new URI("classpath:git.properties"), StandardCharsets.UTF_8); } }
相关推荐
maven git commit id plugin git-commit-id-plugin is a plugin quite similar to ...I had to quickly develop an git version of such a plugin. For those who don't know the previous plugins, it basically ...
git commit id插件与https://fisheye.codehaus.org/browse/mojo/tags/buildNumber-maven-plugin-1.0-beta-4非常相似,但是作为buildNumber,在我启动这个插件时,它只支持cvs和svn,必须做些什么。
git commit id插件与https://fisheye.codehaus.org/browse/mojo/tags/buildNumber-maven-plugin-1.0-beta-4非常相似,但是作为buildNumber,在我启动这个插件时,它只支持cvs和svn,必须做些什么。
git-commit-id-plugin是一个与插件非常相似的,但是作为我启动该插件时的Build Number插件,该插件仅支持CVS和SVN,因此必须完成一些工作。 我必须快速开发此类插件的Git版本。 对于那些不了解插件的人,它基本上...
一个Maven插件,可自动将代码格式化程序部署为pre-commit git挂钩。 提交后,挂钩将自动格式化暂存的Java文件。 在2.x和3.x之间进行重大更改 google-java-format 1.8。 插件支持的最低运行时版本为JDK 11。 在1.x和...
代码状态用法该插件根据您定义的规则删除您的git commit消息。 它基本上是从git存储库中读取提交消息,并将其与您提供的Regex匹配,然后根据您的规则添加每个捕获组。 < plugin> < groupId>ga.rugal.maven...
提交前Maven插件 用于Maven插件 是用于管理Git存储库中的提交挂钩的框架。 它使使用提交挂钩更加容易,但是存在一个问题。 它要求开发人员在其系统上安装二进制文件,然后通过运行pre-commit install --install-...
git-commit-id-plugin docker-maven-plugin Maven资源插件 奥瑟斯 昂首阔步 Rabbitmq Mybatis 快速开始 要求 在计算机上运行此示例的要求如下。 Maven的3.5.0 Java 8 Docker 1.13.1 Docker撰写1.10.0 克隆并...
2 个这样的工具是 Maven 和 Gradle 的插件。 建造 jDocBook Core 使用 Gradle ( ) 作为它的构建工具。 以下是获取有关 Gradle 的更多信息的资源列表: Gradle 用户指南: : Gradle DSL 指南: : 其他 Hibernate/...
我 们都知道在Git 中想要过滤掉一些不想提交的文件,可以把相应的文件添加到.gitignore 中,而.gitignore 这个Android Studio 插件根据不同的语言来选择模板,就不用自己在费事添加一些文件了,而且还有自动补全功能...
mvn clean org.apache.tomcat.maven:tomcat7-maven-plugin:run 混帐初始化 git add -A 状态 git commit -am “第一次提交” git 远程添加原点 :rameshrk/bottlegrotto.git git push -u origin master
Git Commit Information 50.10.4. Build Information 50.10.5. Writing Custom InfoContributors 51. Monitoring and Management over HTTP 51.1. Customizing the Management Endpoint Paths 51.2. Customizing ...