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 .