春にGit情報を注入する
1概要
このチュートリアルでは、Mavenで構築されたSpring BootベースのアプリケーションにGitリポジトリ情報を注入する方法を説明します。
これを行うために、https://github.com/ktoso/maven-git-commit-id-plugin[maven-git-commit-id-plugin] – この目的のためだけに作成された便利なツールを使用します。
2 Mavenの依存関係
プロジェクトの
pom.xml
ファイルの
<plugins>
セクションにプラグインを追加しましょう。
<plugin>
<groupId>pl.project13.maven</groupId>
<artifactId>git-commit-id-plugin</artifactId>
<version>2.2.1</version>
</plugin>
最新バージョンはhttps://search.maven.org/classic/#search%7Cgav%7C1%7Cg%3A%22pl.project13.maven%22%20AND%20a%3A%22git-commit-id-plugin %22[ここ]
このプラグインには少なくとも3.1.1バージョンのMavenが必要であることに注意してください。
3構成
プラグインはその機能を拡張する多くの便利なフラグと属性を持っています。このセクションでは、それらのいくつかについて簡単に説明します。それらすべてを知りたい場合は、maven-git-commit-id-pluginのhttps://github.com/ktoso/maven-git-commit-id-plugin[page]にアクセスしてください。例に直接進み、セクション4 ** に進んでください。
次のスニペットにはプラグイン属性の例が含まれています。必要に応じて
<configuration> </configuration>
セクションにそれらを指定してください。
3.1. 見つからないリポジトリ
Gitリポジトリが見つからない場合はエラーを除外するように設定できます。
<failOnNoGitDirectory>false</failOnNoGitDirectory>
3.2. Gitリポジトリの場所
カスタムの
.git
リポジトリの場所を指定する場合は、
dotGitDirectory
属性を使用します。
<dotGitDirectory>${project.basedir}/submodule__directory/.git</dotGitDirectory>
3.3. 出力ファイル
カスタムの名前やディレクトリを持つプロパティファイルを生成するには、次のセクションを使用してください。
<generateGitPropertiesFilename>
${project.build.outputDirectory}/filename.properties
</generateGitPropertiesFilename>
3.4. 冗長性
より寛大なロギングのために
<verbose>true</verbose>
3.5. プロパティファイルの生成
git.properties
ファイルの作成を無効にすることができます。
<generateGitPropertiesFile>false</generateGitPropertiesFile>
3.6. プロパティのプレフィックス
カスタムプロパティのプレフィックスを指定したい場合は、次のようにします。
<prefix>git</prefix>
3.7. 親リポジトリのみ
サブモジュールを持つプロジェクトで作業するときは、このフラグを設定することで、そのプラグインが親リポジトリに対してのみ機能することを確認します。
<runOnlyOnce>true</runOnlyOnce>
3.8. プロパティ除外
リポジトリのユーザー情報などの機密データを除外したい場合があります。
<excludeProperties>
<excludeProperty>git.user.** </excludeProperty>
</excludeProperties>
3.9. プロパティインクルージョン
指定されたデータのみを含めることも可能です。
<includeOnlyProperties>
<includeOnlyProperty>git.commit.id</includeOnlyProperty>
</includeOnlyProperties>
** 4サンプルアプリケーション
私たちのプロジェクトに関する基本的な情報を返すサンプルRESTコントローラーを作成しましょう。
Spring Bootを使ってサンプルアプリを作成します。 Spring Bootアプリケーションの設定方法がわからない場合は、紹介記事を参照してください。
アプリは
Application
と
CommitIdController
の2つのクラスで構成されます
4.1. 応用
CommitIdApplication
がアプリケーションのルートとして機能します。
@SpringBootApplication(scanBasePackages = { "com.baeldung.git" })
public class CommitIdApplication {
public static void main(String[]args) {
SpringApplication.run(CommitIdApplication.class, args);
}
@Bean
public static PropertySourcesPlaceholderConfigurer placeholderConfigurer() {
PropertySourcesPlaceholderConfigurer propsConfig
= new PropertySourcesPlaceholderConfigurer();
propsConfig.setLocation(new ClassPathResource("git.properties"));
propsConfig.setIgnoreResourceNotFound(true);
propsConfig.setIgnoreUnresolvablePlaceholders(true);
return propsConfig;
}
}
アプリケーションのルートを設定する以外に、プラグインによって生成されたプロパティファイルにアクセスできるように
PropertyPlaceHolderConfigurer
Beanを作成しました。
Springが
git.properties
ファイルを解決できなくてもアプリケーションがスムーズに実行されるように、いくつかのフラグも設定します。
4.2. コントローラ
@RestController
public class CommitInfoController {
@Value("${git.commit.message.short}")
private String commitMessage;
@Value("${git.branch}")
private String branch;
@Value("${git.commit.id}")
private String commitId;
@RequestMapping("/commitId")
public Map<String, String> getCommitId() {
Map<String, String> result = new HashMap<>();
result.put("Commit message",commitMessage);
result.put("Commit branch", branch);
result.put("Commit id", commitId);
return result;
}
}
ご覧のとおり、Gitプロパティをクラスフィールドに注入しています。
利用可能なすべてのプロパティを確認するには、
git.properties
ファイルまたは著者のGithub
page
を参照してください。また、HTTP GETリクエストで、注入された値を含むJSON__で応答する単純なエンドポイントも作成しました。
4.3. Maven Entry
最初に、プラグインによって実行される実行手順と、私たちが有用と考えるその他の設定プロパティを設定します。
<plugin>
<groupId>pl.project13.maven</groupId>
<artifactId>git-commit-id-plugin</artifactId>
<version>2.2.1</version>
<executions>
<execution>
<id>get-the-git-infos</id>
<goals>
<goal>revision</goal>
</goals>
</execution>
<execution>
<id>validate-the-git-infos</id>
<goals>
<goal>validateRevision</goal>
</goals>
</execution>
</executions>
<configuration>
<!-- ... -->
</configuration>
</plugin>
コードが正しく機能するためには、クラスパスに
__git.properties
__fileを含める必要があります。これを実現するために、2つの選択肢があります。
最初のものはファイルを生成するためにプラグインに任せることです。これを指定するには、
generateGitPropertiesFile
設定プロパティを
true
値に設定します。
<configuration>
<generateGitPropertiesFile>true</generateGitPropertiesFile>
</configuration>
2番目の選択肢は、
git.properties
ファイルを自分自身のリソースフォルダーに含めることです。プロジェクトに使用するエントリのみを含めることができます。
# git.properties
git.tags=${git.tags}
git.branch=${git.branch}
git.dirty=${git.dirty}
git.remote.origin.url=${git.remote.origin.url}
git.commit.id=${git.commit.id}
git.commit.id.abbrev=${git.commit.id.abbrev}
git.commit.id.describe=${git.commit.id.describe}
git.commit.id.describe-short=${git.commit.id.describe-short}
git.commit.user.name=${git.commit.user.name}
git.commit.user.email=${git.commit.user.email}
git.commit.message.full=${git.commit.message.full}
git.commit.message.short=${git.commit.message.short}
git.commit.time=${git.commit.time}
git.closest.tag.name=${git.closest.tag.name}
git.closest.tag.commit.count=${git.closest.tag.commit.count}
git.build.user.name=${git.build.user.name}
git.build.user.email=${git.build.user.email}
git.build.time=${git.build.time}
git.build.host=${git.build.host}
git.build.version=${git.build.version}
Mavenはプレースホルダーを適切な値に置き換えます。
注:このプラグインではうまく動作しないIDEもあります。上記のようにプロパティを定義すると、ブートストラップで「循環型のプレースホルダ参照」エラーが発生することがあります。
起動して
localhost:8080/commitId
を要求すると、次のような構造のJSONファイルが表示されます。
{
"Commit id":"7adb64f1800f8a84c35fef9e5d15c10ab8ecffa6",
"Commit branch":"commit__id__plugin",
"Commit message":"Merge branch 'master' into commit__id__plugin"
}
5 Spring Boot Actuator
との統合
プラグインは
Spring Actuator
で簡単に使えます。
documentation
で読むことができるように、
GitInfoContributor
は利用可能であれば
git.properties
ファイルを選択します。
そのため、デフォルトのプラグイン設定では、
/info
endpointを呼び出すとGit情報が返されます。
{
"git": {
"branch": "commit__id__plugin",
"commit": {
"id": "7adb64f",
"time": "2016-08-17T19:30:34+0200"
}
}
}
6. 結論
このチュートリアルでは、https://github.com/ktoso/maven-git-commit-id-plugin[maven-git-commit-id-plugin]を使用する基本を示し、それを使用する簡単なSpring Bootアプリケーションを作成しました。プラグインによって生成されたプロパティの一覧。
提示された設定はすべての利用可能なフラグと属性をカバーしていません、しかしそれはこのプラグインを使い始めるのに必要なすべての基本をカバーしています。
あなたはhttps://github.com/eugenp/tutorials/tree/master/spring-boot/src/main/java/com/baeldung/git[Github]でコード例を見つけることができます。