Spring Boot Gradle Plugin を使ってビルド情報をアプリケーションに埋め込む
Gradle で管理されている Spring Boot アプリケーションのバージョン情報などをアプリケーションコードから動的に参照できるようにするためのメモです。
ビルド情報を Spring Boot アプリケーションに埋め込む
具体的にやるべきことは リファレンス にも書かれているとおり、以下の 2 つだけです。
- Spring Boot Gradle Plugin を利用する
- build.gradle ファイルに以下を記述する
springBoot {
buildInfo()
}
試しに、上記設定を記述した状態で ./gradlew bootBuildInfo
を実行すると、build/resources/main/META-INF
ディレクトリ配下に以下のような、バージョン番号などビルドされる (された) アーティファクトに関わる内容の build-info.properties
ファイルが生成されます。
build.artifact=spring-boot-buildinfo-example
build.group=me.k11i
build.name=spring-boot-buildinfo-example
build.time=2019-12-30T10\:59\:04.798249Z
build.version=1.0.0-SNAPSHOT
この bootBuildInfo
タスクは Java プラグインの classes
タスクに依存されている ので、./gradlew bootJar
コマンドなどでアーティファクトをビルドすれば自動的にその中に含められます。
アプリケーションコードからビルド情報を参照する
Spring Boot アプリケーションのコードからビルド情報を参照するには、例えば以下のように、必要な箇所で BuildProperties
オブジェクトをインジェクションするのがよいでしょう。
@RestController
class ExampleApi {
private static final Logger LOGGER = LoggerFactory.getLogger(ExampleApi.class);
public ExampleApi(@Autowired BuildProperties buildProperties) {
LOGGER.info("App version: {}", buildProperties.getVersion());
}
// ...
}
Spring Boot Actuator 経由でビルド情報を取得する
Spring Boot Actuator を使っていれば、/actuator/info
の web エンドポイント経由でビルド情報を取得することもできます。
$ curl -s localhost:18080/actuator/info | jq .
{
"build": {
"artifact": "spring-boot-buildinfo-example",
"name": "spring-boot-buildinfo-example",
"time": "2019-12-30T11:25:06.988Z",
"version": "1.0.0-SNAPSHOT",
"group": "me.k11i"
}
}
git.properties も生成して埋め込む
git.properties ファイルを生成する Gradle プラグイン を併用すれば、git リポジトリに関する情報も Spring Boot アプリケーションのアーティファクトに埋め込むことができます。このプラグインの使い方はいたって簡単で、単に plugins ブロックに以下のように記述するだけで OK です。
plugins {
// ...
id 'com.gorylenko.gradle-git-properties' version '2.2.0'
}
このプラグインが提供する generateGitProperties
タスクもやはり classes
タスクが依存するように設定されている ので、アーティファクトのビルドに合わせて git.properties
ファイルが生成されることになります。
Spring Boot Actuator は git.properties
ファイルが存在すれば、/actuator/info
エンドポイントのレスポンスにそのファイルの一部の情報を含めます。
$ curl -s localhost:18080/actuator/info | jq .
{
"git": {
"branch": "master",
"commit": {
"id": "9d05db1",
"time": "2019-12-30T10:27:10Z"
}
},
"build": {
"artifact": "spring-boot-buildinfo-example",
"name": "spring-boot-buildinfo-example",
"time": "2019-12-30T11:25:06.988Z",
"version": "1.0.0-SNAPSHOT",
"group": "me.k11i"
}
}
サンプルコード
具体的にビルド情報を扱う Spring Boot アプリケーションのサンプルコードを github.com/komiya-atsushi/spring-boot-buildinfo-example にて公開しています。