在某些情况下,我们必须知道部署到远程服务器的Web应用程序的确切版本。 例如,客户可能想知道我们是否已经在服务器X上部署了错误修复程序。
当然,我们可以尝试使用“传统”方法找到该问题的答案。 问题是:
- 没有人不记得是谁更新了服务器X或何时更新了服务器X。
- 更新它的人不记得哪个是构建中包含的最后一次提交。
换句话说,我们被搞砸了。 我们可以尝试测试服务器X上是否仍然存在该错误,但这并不能真正帮助我们,因为我们的错误修复可能无法正常工作。
这篇博客文章描述了我们如何解决这个问题。 让我们从提取Git存储库的构建时状态开始。
如果使用Spring Boot,则应使用Spring Boot Actuator 。 它可以帮助您发布有关Git存储库状态的信息 。
如果您尚未阅读以下博客文章, 则应先阅读它们,然后再继续阅读此博客文章 :
- 从槽中弹起:将属性值注入配置Bean描述了为什么应将属性值注入配置Bean并帮助您做到这一点。
- 从槽中弹跳:以JSON返回运行时配置描述了如何将Web应用程序的运行时配置写入日志文件并将其作为JSON返回。
提取我们的Git仓库的构建时间状态
我们可以使用Maven Git Commit Id插件提取Git存储库的构建时状态。 让我们了解如何配置Maven Git Commit Id插件并将提取的信息添加到属性文件中。
首先 ,我们需要配置资源目录的位置,并确保将从属性文件中找到的属性占位符替换为实际的属性值。 为此,我们可以将以下XML添加到pom.xml文件的build部分中:
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
<includes>
<include>**/*.properties</include>
</includes>
</resource>
</resources>
其次 ,我们需要配置Maven Git Commit Id插件。 我们可以按照以下步骤进行操作:
- 将Maven Git提交ID插件添加到我们的构建中。
- 确保在默认生命周期的初始化阶段调用了Maven Git Commit Id插件的修订目标。
- 配置.git目录的位置。
我们需要将以下XML添加到pom.xml文件的plugins部分:
<plugin>
<groupId>pl.project13.maven</groupId>
<artifactId>git-commit-id-plugin</artifactId>
<version>2.1.13</version>
<!--
Ensure that the revision goal is invoked during the initialize
phase.
-->
<executions>
<execution>
<goals>
<goal>revision</goal>
</goals>
</execution>
</executions>
<configuration>
<!--
Configure the location of the .git directory.
-->
<dotGitDirectory>${project.basedir}/../.git</dotGitDirectory>
</configuration>
</plugin>
如果您对Maven Git Commit Id插件的默认配置不满意,则应仔细阅读其自述文件:
第三 ,我们需要创建属性文件,其中包含从Git存储库中提取的信息。 application.properties文件如下所示:
git.tags=${git.tags}
git.branch=${git.branch}
git.dirty=${git.dirty}
git.remote.origin.url=${git.remote.origin.url}
git.commit.id=${git.commit.id}
git.commit.id.abbrev=${git.commit.id.abbrev}
git.commit.id.describe=${git.commit.id.describe}
git.commit.id.describe-short=${git.commit.id.describe-short}
git.commit.user.name=${git.commit.user.name}
git.commit.user.email=${git.commit.user.email}
git.commit.message.full=${git.commit.message.full}
git.commit.message.short=${git.commit.message.short}
git.commit.time=${git.commit.time}
git.build.user.name=${git.build.user.name}
git.build.user.email=${git.build.user.email}
git.build.time=${git.build.time}
现在,我们已经配置了Maven Git Commit Id插件。 编译项目时,将从application.properties文件中找到的属性占位符替换为从Git存储库中提取的实际属性值。
从target / classes目录中找到的application.properties文件如下所示:
git.tags=
git.branch=master
git.dirty=true
git.remote.origin.url=git@github.com:pkainulainen/spring-from-the-trenches.git
git.commit.id=1bdfe9cf22b550a3ebe170f60df165e5c26448f9
git.commit.id.abbrev=1bdfe9c
git.commit.id.describe=1bdfe9c-dirty
git.commit.id.describe-short=1bdfe9c-dirty
git.commit.user.name=Petri Kainu