【发布时间】:2021-02-19 01:45:22
【问题描述】:
我有 Spring Boot Web 应用程序并想在我的应用程序中显示版本号。版本号应该类似于 v1.2.3#BUILD_NUMBER,其中 BUILD_NUMBER 是来自 Jenkins 的内部版本号。我怎样才能做到这一点?
【问题讨论】:
标签: spring-boot jenkins gradle
我有 Spring Boot Web 应用程序并想在我的应用程序中显示版本号。版本号应该类似于 v1.2.3#BUILD_NUMBER,其中 BUILD_NUMBER 是来自 Jenkins 的内部版本号。我怎样才能做到这一点?
【问题讨论】:
标签: spring-boot jenkins gradle
首先,让我们确保 Gradle 知道内部版本号。 Jenkins 通过环境变量使其可用。我们可以把它放在 Gradle 项目中普通的version 字段中:
version = "1.0-" + (System.getenv("BUILD_NUMBER") ?: "SNAPSHOT")
从这里我们必须将它放入您的应用程序可以读取的文件中。有两种很好的方法可以做到这一点,我通常同时使用这两种方法。
首先,我们更新最终 jar 中的标准 MANIFEST.MF 文件:
bootJar {
manifest {
attributes(
"Implementation-Title": project.name,
"Implementation-Version": project.version
)
}
}
默认情况下,Spring Boot 会在启动时打印一个横幅,它会读取这些属性并将它们打印出来。您可以自定义横幅,但在您这样做之前,它应该看起来像这样:
. ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot :: (v2.3.5.RELEASE)
2020-11-06 16:00:56.394 INFO 3144 --- [main] com.example.App : Starting App v1.0-SNAPSHOT on PF18RJAD with PID 3144 (C:\Work\Temp\buildinfo-example\app\build\libs\app-1.0-SNAPSHOT.jar started by bmv in C:\Work\Temp\buildinfo-example\app)
2020-11-06 16:00:56.398 INFO 3144 --- [main] com.example.App : No active profile set, falling back to default profiles: default
2020-11-06 16:00:57.181 INFO 3144 --- [main] com.example.App : Started App in 1.292 seconds (JVM running for 1.908)
请注意“Starting App v1.0-SNAPSHOT”这一行,其中“SNAPSHOT”将替换为环境变量(如果存在)。
但请注意,由于 MANIFEST.INF 仅作为 jar 的一部分创建,因此它不会在测试中或通过运行 bootRun 任务显示。你必须运行最终的“boot jar”(例如java -jar build/libs/app-1.0-SNAPSHOT.jar)。
其次,您可以使用BuildInfo 任务。这使 Actuator 能够阅读有关构建的更多详细信息,并使您更容易以编程方式查询它们:
springBoot {
buildInfo()
}
这将在您的应用程序中生成一个文件META-INF/build-info.properties,其中包含版本、工件名称或自定义值等构建信息。您可以通过注入 BuildProperties 实例来查询它们:
@Autowired
BuildProperties buildProperties;
使用它来获取有关构建的信息:
public void greet() {
System.out.println("Hello version: " + buildProperties.getVersion());
}
它应该输出:
Hello version: 1.0-SNAPSHOT
如果您使用 Actuator,它还会从构建属性文件中获取信息。
【讨论】: