Статьи

Больше DevOps для Spring Boot

Я думаю, что Spring Boot привносит что-то новое в таблицу, особенно в отношении DevOps — и я уже написал пост об этом . Однако есть нечто большее, чем метрики и проверки здоровья.

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

В качестве напоминания, просто добавив добавление spring-boot-starter-actuatorзависимости в POM, включите множество конечных точек, среди которых:

  • /metrics для мониторинга приложения
  • /health чтобы проверить приложение может доставить ожидаемый сервис
  • /bean перечисляет все бобы Spring в контексте
  • /configprops перечисляет все свойства, относящиеся к текущему профилю (ам)

Среди тех, один из них представляет особый интерес: /info. По умолчанию он отображает… ничего — или, точнее, строковое представление пустого объекта JSON.

Однако любое свойство, заданное в application.propertiesфайле (или один из его вариантов профиля), попадет на страницу. Например:

Файл свойств Вывод
ключ Стоимость            
info.application.name My Demo App
{
  "application" : {
    "name" : "My Demo App"
  }
}

Настройка статической информации, безусловно, хорошая, но наша цель — получить версию моего приложения в Spring Boot. application.propertiesфайлы автоматически фильтруются Spring Boot на process-resourcesэтапе сборки. Можно использовать любое свойство в POM: его просто нужно установить между @символами. Например:


Файл свойств
Вывод
ключ Стоимость            
info.application.version @ Project.version @
{
  "application" : {
    "version" : "0.0.1-SNAPSHOT"
  }
}




Обратите внимание, что плагин Spring Boot Maven удалит сгенерированные ресурсы, и поэтому приложение будет использовать файл свойств нефильтрованного ресурса из источников. Чтобы сохранить (и использовать) сгенерированные ресурсы, настройте плагин в POM следующим образом:

<build>
  <plugins>
    <plugin>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-maven-plugin</artifactId>
      <configuration>
        <addResources>false</addResources>
      </configuration>
    </plugin>
  </plugins>
</build>

На данный момент у нас есть аналог предыдущей статьи, но мы можем пойти еще дальше. В maven-git-commit-id-pluginсгенерированном виде git.propertiesбудет вся возможная информация, связанная с git. Следующий фрагмент кода является примером созданного файла:

#Generated by Git-Commit-Id-Plugin
#Fri Jul 10 23:36:40 CEST 2015
git.tags=
git.commit.id.abbrev=bf4afbf
[email protected]
git.commit.message.full=Initial commit\n
git.commit.id=bf4afbf167d51909bd984c35ad5b85a66b9c44b9
git.commit.id.describe-short=bf4afbf
git.commit.message.short=Initial commit
git.commit.user.name=Nicolas Frankel
git.build.user.name=Nicolas Frankel
git.commit.id.describe=bf4afbf
[email protected]
git.branch=master
git.commit.time=2015-07-10T23\:34\:46+0200
git.build.time=2015-07-10T23\:36\:40+0200
git.remote.origin.url=Unknown

Из всех этих данных в конечной точке используются только следующие:

ключ Вывод
git.branch
{
  "git" : {
    "branch" : "master",
    "commit" : {
      "id" : "bf4afbf",
      "time" : "2015-07-10T23:34:46+0200"
    }
  }
}

git.commit.id
git.commit.time

Поскольку путь и форматирование согласованы, вы можете разработать cronjob для анализа всех ваших приложений и создания вики-страницы со всей этой информацией для каждого сервера / среды. Больше не нужно ssh сервера и копаться в файловой системе, чтобы раскрыть версию.

Таким образом, /infoконечная точка может быть очень мощным активом в вашей организации, независимо от того, являетесь ли вы DevOps самостоятельно или только готовы помочь своим Ops. Более подробную информацию можно найти в документации по Spring Boot .