12 factor app: зависимости



Продолжаем разбирать признаки здорового сервиса. Второй пункт рекомендует



Explicitly declare and isolate dependencies



Разберём его подробнее.



Для java приложений нужные модули и библиотеки описываются в pom.xml или build.gradle файле. Тогда приложение будет собираться на любой среде, где есть среда исполнения и установленный менеджер зависимостей. Не будет проблем с локальной разработкой и настройкой CI.



Dependency isolation часто пропускают при обсуждении 12 факторов, потому что непонятно, что это такое:) Оригинальный текст и правда звучит туманно: ☁️no implicit dependencies “leak in” from the surrounding system☁️



Вообще это означает, что версия каждой зависимости должна быть чётко определена.



Альтернатива — опция latest для Docker образов и gradle зависимостей.



Почему это не ок? Допустим, приложение использует библиотеку Х версии 1 во время разработки и всех стадий тестирования. Затем у библиотеки Х выходит версия 2, которая использует другое API. Вторая версия подтягивается во время релиза, и продакшн погружается во мрак🌑



Таких сюрпризов не будет, если обозначить версию явно

🔹 в pom/build файле проекта

🔹 в BOM файле

🔹 в родительском pom/build



В большинстве компаний используются специальные инструменты для работы с зависимостями — Artifactory или Nexus. Они нужны, чтобы

🔸 хранить приватные артефакты — корпоративные модули или библиотеки

🔸 кэшировать библиотеки, чтобы экономить трафик

🔸 использовать проверенные службой безопасности артефакты



При использовании Artifactory/Nexus конфликты версий случаются редко. Но есть и обратная сторона: апгрейд библиотеки превращается в увлекательное бюрократическое приключение:)



Как проверить приложение:

Для сборки проекта достаточно команды maven/gradle

Для всех сред используется один pom/build файл

Если в компании используется Artifactory или Nexus, не добавляйте явно другие репозитории



12 factor app — классный документ, он объединяет важные моменты, которые часто остаются в стороне. Работа с зависимостями, кодовой базой и остальные 10 пунктов — это БАЗА. Обычно она описана в недрах Confluence или передаётся из уст в уста:)



Объединить все важные знания в один документ — прекрасная идея, а для нас — отличный способ закрыть возможные пробелы🧡