SpringBootでGitの情報を取得して、APIで返却する.

エキサイト株式会社メディア事業部エンジニアの佐々木です。前回アプリケーションの情報をSpringBootアプリケーションに組み込みましたが、これに追加でGitの情報を組み込んでみます。

前回: tech.excite.co.jp

前提

JDK Version

openjdk 17.0.1 2021-10-19 LTS
OpenJDK Runtime Environment Corretto-17.0.1.12.1 (build 17.0.1+12-LTS)
OpenJDK 64-Bit Server VM Corretto-17.0.1.12.1 (build 17.0.1+12-LTS, mixed mode, sharing)

Gradle Version

------------------------------------------------------------
Gradle 7.5
------------------------------------------------------------

Build time:   2022-07-14 12:48:15 UTC
Revision:     c7db7b958189ad2b0c1472b6fe663e6d654a5103

Kotlin:       1.6.21
Groovy:       3.0.10
Ant:          Apache Ant(TM) version 1.10.11 compiled on July 10 2021
JVM:          17.0.1 (Amazon.com Inc. 17.0.1+12-LTS)
OS:           Mac OS X 11.5.2 x86_64

設定

Gitで取得できる情報を出力するために、GradleのPluginを追加する。

plugins {
         ....
    id "com.gorylenko.gradle-git-properties" version "2.4.1"
         ....
}

springBoot {
    buildInfo()
}

タスクの実行

下記、タスクを実行します。

./gradlew generateGitProperties

実行すると、下記ファイルが生成されます。

./build/resources/main/git.properties

git.branch=feature/sample-template
git.build.host=xxxx.mac
git.build.user.email=xxxxx@zzzz.jp
git.build.user.name=xxxxxxx
git.build.version=0.0.1-SNAPSHOT
git.closest.tag.commit.count=
git.closest.tag.name=
git.commit.id=703e0101046cbaea76c2ecdd188cf9adf5a1f6c6
git.commit.id.abbrev=703e010
git.commit.id.describe=
git.commit.message.full=gitignore\u8FFD\u52A0.\n
git.commit.message.short=gitignore\u8FFD\u52A0.
git.commit.time=2022-09-19T21\:34\:51+0900
git.commit.user.email=xxxxx@zzzz.jp
git.commit.user.name=xxxxx
git.dirty=true
git.remote.origin.url=xxxxxx
git.tags=
git.total.commit.count=10

結構データがとれますね。

アプリケーションから使えるようにする

アプリケーションから使えるようにするには、SpringのDIコンテナに登録する必要があります。

設定

application.ymlに先程の build/resources/main/git.properties を読み込ませる設定を記述します。

spring:
  config:
    import:
      - 'classpath:git.properties'

DIコンテナへの登録

DIコンテナへの登録を行います。

@ConstructorBinding
@RequiredArgsConstructor
@ConfigurationProperties(prefix = "git.commit")
@Getter
public class GitInfoCommitProperty {
    private final String id;
}

今回は、コミットIDのみをDIコンテナに登録します。

REST APIで応答する

登録したものをREST APIを通して出力してみます。 下記コードをControllerに記述します。

@RestController
@RequestMapping
@RequiredArgsConstructor
public class RootController {

    private final GitInfoCommitProperty gitInfoCommitProperty;

    @GetMapping("git")
    public Object git(){
        return gitInfoCommitProperty;
    }
}

APIをリクエストすると下記のように出力されます。

$ curl localhost:8080/git | jq

{
  "id": "703e0101046cbaea76c2ecdd188cf9adf5a1f6c6"
}

まとめ

SpringBootにGradleのプラグインを追加することで、アプリケーションからGitの情報を取得できるようになりました。静的コンテンツのキャッシュ回避のパラメータとかで使えそうです。

最後に

エキサイトではフロントエンジニア、バックエンドエンジニア、アプリエンジニアを随時募集しております。長期インターンも歓迎していますので、興味があれば連絡いただければと思います。

カジュアル面談はこちらになります! meety.net

募集職種一覧はこちらになります!(カジュアルからもOK) www.wantedly.com