Внедрение информации Git в Spring

Внедрение информации Git в весну

1. обзор

В этом руководстве мы покажем, как внедрить информацию репозитория Git в приложение на основе Spring Boot, созданное с помощью Maven.

Для этого мы будем использоватьmaven-git-commit-id-plugin - удобный инструмент, созданный исключительно для этой цели.

2. Maven Зависимости

Давайте добавим плагин в раздел<plugins> нашего файлаpom.xml нашего проекта:


    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'spage иif 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 классов:Application иCommitIdController

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;
    }
}

Помимо настройки корня нашего приложения, мы создали bean-компонентPropertyPlaceHolderConfigurer, чтобы мы могли получить доступ к файлу свойств, созданному плагином.

Мы также установили некоторые флаги, чтобы приложение работало без сбоев, даже если 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. Для этого у нас есть два варианта.

Первый - оставить это плагину для генерации файла. Мы можем указать это, установив для свойства конфигурацииgenerateGitPropertiesFile значениеtrue:


    true

Второй вариант - включить файл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, если он доступен. Итак, с конфигурацией плагина по умолчанию информация Git будет возвращена при вызове конечной точки/info:

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

6. Заключение

В этом руководстве мы показали основы использованияmaven-git-commit-id-plugin и создали простое приложение Spring Boot, в котором используются свойства, созданные плагином.

Представленная конфигурация не охватывает все доступные флаги и атрибуты, но охватывает все основы, необходимые для начала работы с этим плагином.

Вы можете найти примеры кода наGithub.