Java

Spring Boot / Gradleプロジェクトでプロジェクトのバージョン/Gitのコミットハッシュ/ビルド日時をアプリケーション内で表示する

「今デプロイしているアプリケーションのバージョンがどのコミット時のものか、いつビルドしたものか」という情報を確認したくなることは良くあります。
もちろん、適切にCDできているのであれば、最後にデプロイパイプラインが稼働したタイミングを確認すれば良いです。
が、「果たして本当にそのバージョンが見えているのか」という疑問はつきまといます。

画面下部や、HTMLのコメントでバージョンやビルド日時を確認できると、確信をもって確認できます。

GradleでGitのコミットハッシュをアプリケーションに含める方法は、プラグインを使う方法を中心に、調べると色々と出てきます。

プラグインを使わずにシンプルに実現する方法をまとめました

build.gradleをご覧いただければ分かりますが、以下のようにビルド時に日付時刻、git rev-parse –short HEADの結果をMANIFEST.MFのImplementation-Versionに埋め込んでいるだけです。

def gitHash = { ->
    def gitProcess = 'git rev-parse --short HEAD'.execute()
    gitProcess.waitFor()
    return gitProcess.text.trim()
}

bootJar {
    manifest {
        attributes(
            'Implementation-Version': "${project.name} ${project.version}(${gitHash}) built on ${LocalDateTime.now()}"
        )
   }
}

あとはアプリケーション内でImplementation-Versionを取得するstaticメソッドを用意し、

    public static String getImplementationVersion() {
        return IndexController.class.getPackage().getImplementationVersion();
    }

Thymeleafテンプレート内でこのメソッドを呼びだすだけです。

<div th:text="${T(com.example.gitcommithash.IndexController).getImplementationVersion()}"></div>

コメントに埋め込みたい場合はこう

<!--
[[${T(com.example.gitcommithash.IndexController).getImplementationVersion()}]]
-->

すると以下のようにバージョンやビルド日時、コミットハッシュを表示できます。

最小限の構成のプロジェクトはこちら: https://github.com/yusuke/spring-boot-git-commit-hash