Spring BootアプリにGit情報を埋め込む
@tokuhiromさんのブログエントリーを読んで、maven-git-commit-id-pluginの存在を知りました。
[java] どのブランチから作られた jar かをわかりやすくしたい
@makingさんから、Spring Bootなら依存を足すだけで情報が取れるようになるよと教えて頂いたので早速試してみました。
@matsumana Spring Bootならgit plugin入れてビルドするだけでActuatorのinfoエンドポイントでリビジョンとブランチメンテが取れます!
— Toshiaki Maki (@making) February 5, 2015
pom.xmlはこんな感じ。
spring-boot-starter-actuatorとgit-commit-id-pluginを追加します。
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<compilerArgument>-Xlint:unchecked</compilerArgument>
<encoding>${file.encoding}</encoding>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<configuration>
<encoding>${file.encoding}</encoding>
</configuration>
</plugin>
<plugin>
<groupId>pl.project13.maven</groupId>
<artifactId>git-commit-id-plugin</artifactId>
</plugin>
</plugins>
</build>
そして、 http://localhost:8080/info にリクエストを投げると、こんなレスポンスが返ってきます。
{
git: {
branch: "master",
commit: {
id: "a933699",
time: "2015-02-06T02:39:50+0900"
}
}
}
サンプルソースは ここ に置いておきました。
ちなみに、僕はmaven-jar-pluginのmanifestEntries使ってJenkinsのJOB情報とGit情報をMANIFEST.MFに埋め込んでおいて、JSONで返すAPIを作ってます。
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>2.4</version>
<configuration>
<archive>
<manifest>
<addDefaultImplementationEntries>true</addDefaultImplementationEntries>
<addDefaultSpecificationEntries>true</addDefaultSpecificationEntries>
</manifest>
<manifestEntries>
<Application-Name>${project.build.finalName}</Application-Name>
<Application-Version>${project.version}</Application-Version>
<Iteration-Name>${iteration}</Iteration-Name>
<Build-Time>${buildNumber}</Build-Time>
<JenkinsBuildNumber>${BUILD_NUMBER}</JenkinsBuildNumber>
<JenkinsBuildId>${BUILD_ID}</JenkinsBuildId>
<JenkinsJobName>${JOB_NAME}</JenkinsJobName>
<JenkinsBuildTag>${BUILD_TAG}</JenkinsBuildTag>
<JenkinsExecutorNumber>${EXECUTOR_NUMBER}</JenkinsExecutorNumber>
<JenkinsNodeName>${NODE_NAME}</JenkinsNodeName>
<JenkinsJavaHome>${JAVA_HOME}</JenkinsJavaHome>
<JenkinsWorkspace>${WORKSPACE}</JenkinsWorkspace>
<JenkinsUrl>${JENKINS_URL}</JenkinsUrl>
<JenkinsGitCommit>${GIT_COMMIT}</JenkinsGitCommit>
</manifestEntries>
</archive>
</configuration>
</plugin>
</plugins>
</build>