Работа с проектом и инструменты

Работа с проектом

Работа с проектом будет выстроена аналогично стажировке TopJava:
  • В качестве системы контроля версий будет использоваться Git. Согласно принципам 12-факторного приложения, каждый сервис имеет свою собственную кодовую базу и репозиторий
  • Перед занятием по каждому сервису будет нужно:
    • Склонировать локально начальный репозиторий сервиса
      Первый сервис проекта: menu-service:
      git clone https://github.com/JavaOPs/menu-service
    • По мере прохождения материала последовательно применять в ветке master пронумерованные патчи (Apply patch) из каталога patch проекта menu-service.zip. После применения каждого патча следует делать коммит, чтобы было легче отслеживать изменения в git.
    ИЛИ
    • Открыть готовый проект с уже примененными патчами: menu-service.zip
    • По мере прохождения материала откатывать проект на нужное место: Checkout Revision
    Если вам нужен доступ с разных компьютеров, можно настроить push в свой репозиторий GitHub/GitLab с условием: репозитории сервисов обязательно должны быть ПРИВАТНЫЕ
  • Патчи с заготовкой для домашнего задания имеют в названии PHW (Prepare for HomeWork)
    Патчи с решенным домашним заданием в названии имеют HWD (HomeWork Done).
  • Домашние задания обязательно делать в отдельной ветке (New branch...). Чтобы посмотреть разбор решения ДЗ, необходимо будет переключиться обратно в ветку master и применить соответствующий патч HWD или сделать на него Checkout Revision.

Работа с Gradle

Gradle - система автоматической сборки, построенная на принципах Apache Ant и Apache Maven, но предоставляющая DSL на языках Groovy и Kotlin вместо Maven XML-конфигурации проекта.
Вообще gradlew and gradle/gradle-wrapper.jar можно в репозиторий не коммитить, но они нам понадобятся для GitHub Action, поэтому оставьте их в репозитории.
IDEA должна распознать проект и сделать справа Gradle вкладку (проверьте, что Gradle есть у вас в плагинах) В IDEA Gradle Settings... -> Distribution можно:
gradle test - запустить тесты (в окне Gradle: Tasks -> verification -> test)
gradle build - собрать проект (Tasks -> build -> build)
gradle build -x test - собрать проект без тестов
gradle tasks - посмотреть все задачи
gradle dependencies - посмотреть все зависимости
Внимание: запуск проекта gradle bootRun (Tasks -> application -> bootRun) не будет работать, пока мы не пропишем в патче 1_data_layer_5_PHW настройки коннекта к БД.

Работа с Docker

Для работы современного ПО часто требуется большая настроенная инфраструктура: RDBMS, NoSQL, Kafka, RabbitMQ и др. Кроме того, концепция микросервисов подразумевает запуск каждого сервиса в изолированной среде, их быстрое поднятие и масштабирование. Инструмент Docker позволяет «упаковать» приложение со всем его окружением и зависимостями в контейнер, который может быть развёрнут на любой Linux-системе, что делает его незаменимым инструментом разработчика. Аналогично GitHub, для контейнеров есть репозиторий DockerHub, куда можно публиковать свои контейнеры и откуда можно брать готовые контейнеры со стандартным ПО. Таким образом, Docker служит для:
  • Ускорения процесса настройки окружения. Нет нужды в установке сторонних программ вроде PostgreSQL, Redis, Elasticsearch. Они могут быть запущены в контейнерах
  • Удобной инкапсуляции приложений, которые можно представить как единый контейнер, а не набор файлов и инструкций развертывания
  • Одинакового поведения приложений на локальном компьютере и тестовом/прод-сервере
  • Простого и понятного мониторинга
  • Легкого масштабирования. Если вы сделали свое приложение правильно, то оно будет готово к масштабированию не только в Docker

После установки и запуска Docker на хосте стартует фоновый процесс - Docker daemon, отвечающий за создание и управление образами, контейнерами, хранилищами данных (volumes) и сетями. Этот процесс имеет API, которое используется для выполнения разнообразных команд клиентскими приложениями: Docker Desktop, Docker CLI, Docker Compose. Наряду с Docker daemon и его клиентами, существует Docker registry - хранилище образов различных приложений, наподобие Maven репозиториев. Одним из наиболее популярных открытых Docker registry является Docker Hub, откуда по умолчанию Docker пытается получить все образы, не хранящиеся локально на хосте.

Литература:
Работе Docker могут мешать: DrWeb, firewall, анитивирусы
PS: Сейчас Docker Hub работает без дополнительных настроек - разблокировали по геоайпи в России.
В случае проблем есть средства по обходу блокировки: в комментариях, статья
Первое занятие: Menu Service