Перейти к основному содержимому

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

· 5 мин. чтения

1. Обзор

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

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

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

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

<plugin>
<groupId>pl.project13.maven</groupId>
<artifactId>git-commit-id-plugin</artifactId>
<version>2.2.1</version>
</plugin>

Вы можете найти последнюю версию здесь . Имейте в виду, что для этого подключаемого модуля требуется версия Maven не ниже 3.1.1.

Обратите внимание, что у этого плагина есть более поздняя перемещенная версия (5.x или более поздняя), доступная по другим координатам репозитория. Однако для этой версии требуется Java 11. Поскольку мы будем разрабатывать пример приложения с использованием Spring Boot 2.x, имеющего базовую версию Java 8, нам нужно будет использовать более старую версию подключаемого модуля. Это позволяет нам поддерживать совместимость между Spring Boot и git-commit-id-plugin .

3. Конфигурация

Плагин имеет множество удобных флагов и атрибутов, расширяющих его функциональность. В этом разделе мы кратко опишем некоторые из них. Если вы хотите познакомиться со всеми ними, посетите страницу maven-git-commit-id-plugin , а если хотите сразу перейти к примеру, перейдите к разделу 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, см. вводную статью: Настройка веб-приложения Spring Boot .

Наше приложение будет состоять из 2 классов: Application и CommitIdController.

4.1. Заявление

CommitIdApplication будет служить корнем нашего приложения:

@SpringBootApplication(scanBasePackages = { "com.foreach.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<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 . Мы также создали простую конечную точку, которая на HTTP-запрос GET ответит JSON , содержащим введенные значения.

4.3. Вход Мейвена

Сначала мы настроим шаги выполнения, которые должен выполнять плагин, а также любые другие свойства конфигурации, которые мы считаем полезными:

<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 в нашем пути к классам. Для этого у нас есть два варианта.

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

<configuration>
<generateGitPropertiesFile>true</generateGitPropertiesFile>
</configuration>

Второй вариант — самостоятельно включить файл 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 .

Как вы можете прочитать в документации , 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 .