春にGit情報を注入する

Git情報をSpringに注入する

1. 概要

このチュートリアルでは、Gitリポジトリ情報をMavenで構築されたSpringBootベースのアプリケーションに挿入する方法を示します。

これを行うために、maven-git-commit-id-pluginを使用します。これはこの目的のためだけに作成された便利なツールです。

2. Mavenの依存関係

プロジェクトのpom.xmlファイルの<plugins>セクションにプラグインを追加しましょう。


    pl.project13.maven
    git-commit-id-plugin
    2.2.1

最新バージョンhereを見つけることができます。 このplugin requires at least 3.1.1 version of Maven.

3. 設定

プラグインには、機能を拡張する多くの便利なフラグと属性があります。 このセクションでは、それらのいくつかを簡単に説明します。 それらすべてを知りたい場合は、maven-git-commit-id-pluginのpageif you want to go straight to the example, go to section 4にアクセスしてください。

次のスニペットには、プラグイン属性の例が含まれています。必要に応じて、<configuration></configuration>セクションで指定してください。

3.1. リポジトリがありません

Gitリポジトリが見つからない場合はエラーを省略するように構成できます。

false

3.2. Gitリポジトリの場所

カスタム.gitリポジトリの場所を指定する場合は、dotGitDirectory属性を使用します。

${project.basedir}/submodule_directory/.git

3.3. 出力ファイル

カスタム名やディレクトリを含むプロパティファイルを生成するには、次のセクションを使用します。


    ${project.build.outputDirectory}/filename.properties

3.4. 冗長性

より寛大なログを使用するには:

true

3.5. プロパティファイルの生成

git.propertiesファイルの作成をオフにすることができます。

false

3.6. プロパティのプレフィックス

カスタムプロパティプレフィックスを指定する場合は、次を使用します。

git

3.7. 親リポジトリの場合のみ

サブモジュールを含むプロジェクトで作業する場合、このフラグを設定すると、そのプラグインは親リポジトリに対してのみ機能します。

true

3.8. プロパティの除外

リポジトリのユーザー情報などの機密データを除外したい場合があります。


    git.user.*

3.9. プロパティの包含

指定したデータのみを含めることもできます。


    git.commit.id

4. サンプルアプリケーション

プロジェクトに関する基本情報を返すサンプルRESTコントローラーを作成しましょう。

Spring Bootを使用してサンプルアプリを作成します。 Spring Bootアプリケーションのセットアップ方法がわからない場合は、紹介記事Configure a Spring Boot Web Applicationを参照してください。

私たちのアプリは2つのクラスで構成されます:ApplicationCommitIdController

4.1. 応用

CommitIdApplicationは、アプリケーションのルートとして機能します。

@SpringBootApplication(scanBasePackages = { "com.example.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;
    }
}

アプリケーションのルートを構成することに加えて、プラグインによって生成されたプロパティファイルにアクセスできるようにPropertyPlaceHolderConfigurerBeanを作成しました。

また、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 getCommitId() {
        Map result = new HashMap<>();
        result.put("Commit message",commitMessage);
        result.put("Commit branch", branch);
        result.put("Commit id", commitId);
        return result;
    }
}

ご覧のとおり、Gitプロパティをクラスフィールドに注入しています。

使用可能なすべてのプロパティを確認するには、git.propertiesファイルまたは作成者のGithubpageを参照してください。 また、HTTP GETリクエストで、挿入された値を含むa JSONで応答する単純なエンドポイントを作成しました。

4.3. Mavenエントリー

まず、プラグインによって実行される実行手順と、役立つと思われるその他の構成プロパティを設定します。


    pl.project13.maven
    git-commit-id-plugin
    2.2.1
    
        
            get-the-git-infos
            
                revision
            
        
        
            validate-the-git-infos
            
                validateRevision
            
        
    
    
        
    

コードが正しく機能するためには、クラスパスにgit.properties fileを含める必要があります。 これを達成するために、2つのオプションがあります。

最初の方法は、ファイルを生成するためにプラグインに任せることです。 これを指定するには、generateGitPropertiesFile構成プロパティにtrue値を設定します。


    true

2番目のオプションは、git.propertiesファイルをresourcesフォルダーに含めることです。 プロジェクトで使用するエントリのみを含めることができます。

# 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 BootActuatorとの統合

プラグインはSpring Actuatorで簡単に使用できます。

documentationで読み取ることができるように、GitInfoContributorは、利用可能な場合、git.propertiesファイルを取得します。 したがって、デフォルトのプラグイン構成では、/infoエンドポイントを呼び出すときにGit情報が返されます。

{
  "git": {
    "branch": "commit_id_plugin",
    "commit": {
      "id": "7adb64f",
      "time": "2016-08-17T19:30:34+0200"
    }
  }
}

6. 結論

このチュートリアルでは、maven-git-commit-id-pluginの使用の基本を示し、プラグインによって生成されたプロパティを利用する単純なSpringBootアプリケーションを作成しました。

提示された構成は、使用可能なすべてのフラグと属性をカバーしているわけではありませんが、このプラグインで作業を開始するために必要なすべての基本をカバーしています。

Githubにコード例があります。