Бонус: исправление его иногда загадочного отсутствия

Spring Boot Actuator великолепен. Среди множества функций /actuator/info мы получаем информацию о приложении, которое мы запускаем.

Вышеупомянутое содержит 2 ключевых элемента информации: информацию о git и информацию о сборке. Информация Git сообщает нам точную версию git, из которой создано текущее запущенное приложение. Информация о сборке, с другой стороны, сообщает нам точную среду (например, время, версию, хост и т. д.) сборки.

Если вы запускаете свою сборку в среде CI/CD, например. GitLab, /actuator/info, может сообщить нам точный номер конвейера, который создал и, возможно, развернул приложение.

С помощью нескольких простых шагов мы узнаем, как заставить его отображать всю такую ​​информацию.

Включить информацию об приводе

Во-первых, убедитесь, что у вас включен Spring Boot Actuator. Предполагая, что вы используете maven, убедитесь, что вы либо выбрали Actuator в https://start.spring.io/, либо включили его зависимость в POM.

<dependencies>
  <dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-actuator</artifactId>
  </dependency>
</dependencies>

/actuator/info пока ничего не возвращает. Он даже недоступен. Чтобы включить эту конечную точку, добавьте следующее в application.properties

management.endpoints.web.exposure.include=info, health

/actuator/info по-прежнему ничего не возвращает. Нам нужен еще один плагин для предоставления необходимой информации.

Настройте плагин «git-commit-id»

Мы будем использовать подключаемый модуль maven с именем «git-commit-id» для создания файла git.properties, который подхватывается GitInfoContributor Springboot Actuator для возврата git и информации о сборке приложения.



Добавьте следующее в POM

<plugin>
  <groupId>io.github.git-commit-id</groupId>
  <artifactId>git-commit-id-maven-plugin</artifactId>
  <version>5.0.0</version>
  <executions>
   <execution>
    <id>get-the-git-infos</id>
    <goals>
     <goal>revision</goal>
    </goals>
    <phase>initialize</phase>
   </execution>
  </executions>
  <configuration>
   <generateGitPropertiesFile>true</generateGitPropertiesFile>
   <generateGitPropertiesFilename>${project.build.outputDirectory}/git.properties</generateGitPropertiesFilename>
   <commitIdGenerationMode>full</commitIdGenerationMode>
  </configuration>
 </plugin>

И это тоже для application.properties, чтобы показать полное содержание в git.properties

management.info.git.mode=full

Пока все хорошо, если вы запустите демонстрационное приложение на локальной машине, как я сделал выше.

Получение номера конвейера GitLab в информации о сборке

Как только вы создадите свое приложение в среде CI/CD, например. GitLab, GitHub, Circle, плагин maven добавляет дополнительную информацию, такую ​​как git.build.number и git.build.number.unique, в git.properties , откуда /actuator/info будет собирать и показывать.

Предполагая, что вы установили GitLab CI/CD и создаете свое приложение по запросу или автоматически, следующее содержимое в git.properties фиксирует точный номер конвейера, на котором было создано ваше приложение.

#Generated by Git-Commit-Id-Plugin
git.branch=master
git.build.host=runner-xxurkrix-project-44840724-concurrent-0
git.build.number=5
git.build.number.unique=825731749
git.build.time=2023-04-03T01\:20\:08+0000
git.build.user.email=
git.build.user.name=
git.build.version=0.0.1-SNAPSHOT

После развертывания /actuator/info приложения должно показать нам информацию о сборке с правильным номером конвейера.

Бонус: исправление загадочного отсутствия git.build.number.unique

Это должно быть редко, потому что я никогда не видел, чтобы это происходило с вышеуказанной настройкой. Но это произошло, когда мой коллега попытался прочитать git.properties и переделать конечную точку /actuator/info.

Виновником здесь является наличие ключей git.build.number и git.build.number.unique. Они подходят для файла .properties, но не являются допустимыми записями для документа JSON, который возвращает /actuator/info.

#Generated by Git-Commit-Id-Plugin
git.branch=master
git.build.host=runner-xxurkrix-project-44840724-concurrent-0
git.build.number=5
git.build.number.unique=825731749
git.build.time=2023-04-03T01\:20\:08+0000
git.build.user.email=
git.build.user.name=
git.build.version=0.0.1-SNAPSHOT

Каким-то образом GitInfoContributor актуатора может получить правильное значение от git.build.number.unique. Возможно, его разработчику повезло, потому что я не смог найти какой-либо специальной обработки для двух вышеуказанных конфликтующих записей в исходном коде GitInfoContributor

Решение простое: исключите избыточное свойство git.build.number. Нам нужно использовать регулярное выражение в приведенной ниже конфигурации <excludeProperty>, потому что мы хотим исключить только это свойство и при этом сохранить git.build.number.unique.

<configuration>
   <generateGitPropertiesFile>true</generateGitPropertiesFile>
   <generateGitPropertiesFilename>${project.build.outputDirectory}/git.properties</generateGitPropertiesFilename>
   <commitIdGenerationMode>full</commitIdGenerationMode>

   <excludeProperties>
      <excludeProperty>^git.build.number$</excludeProperty>
   </excludeProperties>
</configuration>

Повышение уровня кодирования

Спасибо, что являетесь частью нашего сообщества! Перед тем, как ты уйдешь:

  • 👏 Хлопайте за историю и подписывайтесь на автора 👉
  • 📰 Смотрите больше контента в публикации Level Up Coding
  • 💰 Бесплатный курс собеседования по программированию ⇒ Просмотреть курс
  • 🔔 Подписывайтесь на нас: Twitter | ЛинкедИн | "Новостная рассылка"

🚀👉 Присоединяйтесь к коллективу талантов Level Up и найдите прекрасную работу