Это 2-ая часть статьи "Как задеплоить монолитный pet проект на Java с 0 и не сойти с ума". Первую часть вы можете найти по ссылке. В первой  части мы успешно добавили свои наработки в репозиторий GitHub, в этой части мы рассмотрим что такое GitHub Actions и как с помощью этого инструмента сбилдить наш проект, сформировать из билда свой образ docker container и как отправить наш image в хранилище DockerHub. Actions в GitHub это инструкции, которые GitHub может сделать исполнить в рамках вашего приложения. Actions являются частью парадигмы разработки приложения CI/CD (Continuous Integration/Continuous Delivery). В этой статье мы разберем такие шаги как Build и Release. Для того, чтобы сформировать jar файл из своего проекта, достаточно в корневой папке проекта запустить команду. Для того, чтобы Actions у себя сформировал этот образ, перейдите в GitHub в свой проект и нажмите на вкладку Actions. Далее в поиске найдите Java with gradle (для настройки приложения я использую gradle, по maven будет написана отдельная статья, я надеюсь). Нажимите на кнопку "Configure" и вас перекидывает на шаблон файла с прописанными настройками для build gradle.  В открывшемся файле можете просто удалить все и вставлять мой код, он идет с пояснениями. Хочу немного остановится подробнее на моменте вызова нашего Action. При разработке в большой команде с несколькими контурами (dev, stage, prod) довольно важно иметь различные алгоритмы развертки кода на стенде. Например, не всегда при разворачивании на dev стенде нужно проходить интеграционные тесты. Так как статья состоит в том, что мы делаем деплой на сервер, то мы указываем что Actions будет работать при push операции в репозитории с ветки "main".  Далее указываем с помощью какой ос будет происходить управление командами. Я выбрал ubuntu, с другими я не пробовал. Далее на уровне runs-on (это важно, именно на одном уровне, хоть код и будет в репозитории, но на всякий случай подсвечу этот момент) мы указываем шаги нашего CI/CD. Первый шаг - подключаем версию JDK, под которой вы работаете. Она у меня 17. Следующим шагом мы сбилдим наш проект следующей командой. Теперь на сервере в GitHub у нас сформировался jar файл, который мы сможем запустить.  Чтобы проверить что все работает, сохраните ваш файл, перейдите во вкладку Actions и сможете увидеть что ваш Actions завершил свою работу успешно. С шагом build мы разобрались, теперь наш образ нужно где-то хранить. В идеале мы должны производить версионирование версий различных образов, чтобы можно было откатиться к предыдущей версии, если что-то пошло не так, но в этой статье мы просто будем использовать последнюю версию, перезатирая старые. Хранить наш образ мы будем в DockerHub, а из него мы уже будем выгружать готовый образ к себе на сервер.  Для того, чтобы положить наш образ в DockerHub, первым шагом нам нужно будет авторизоваться. После авторизации нажмите на главном экране на кнопку "Create repository".  Далее нужно добавить login, password, имя репозитория от DockerHub в GitHub Secrets. Это нужно для того, чтобы ваши данные оставались в сохранности и чтобы можно было легко поменять эти данные, не изменяя кодпроекте. Перейдите обратно в ваш репозиторий GitHub и нажмите на вкладку "Settings". Далее перейдите в "Secrets and variables" -> "Actions". Далее во вкладке "Secrets" нажмите на кнопку "New repository secret". Добавьте сюда следующие secrets DOCKERHUB_USERNAME, DOCKERHUB_PASSWORD, DOKCERHUB_REPOSITORY_NAME с соответствующими значениями как показано на картинке ниже. Результат должен выглядеть как на следующей картинке. Еще один важный момент, нужно в корневую папку проекта добавить Dockerfile, чтобы docker смог сформировать образ. Создайте в коневой папке файл с названием Dockerfile без какого-либо расширения и добавьте туда следующий код. Вместо <Name of your GitHub repository> нужно вставить имя своего GitHub репозитория. Далее возвращайтесь в ваш файл с Actions и пропишите следующие шаги. Сохраняйте ваш вайл и дождитесь когда Actions закончит свою работу. Также в своем DockerHub репозитории вы сможете увидеть результат своей работы в виде добавленного image. Таким образом, мы смогли реализовать шаги сделать шаги по автоматической сборке нашего docker image, который вы можете выгрузить на любую машину и запустить его.  В следующей статье мы разберем как сконфигурирован свой Instance в AWS EC2, как подключаться к нему и допишем команды для отправки и запуска нашего docker image на сервере, по сути мы сделаем шаг Release из парадигмы CI/CD. Результатом будет ip адрес, по которому вы сможете с любого устройства достучаться до своего приложения.  Спасибо за внимание, оставляйте свои вопросы и комментарии в комментариях :) P.S. ссылка на проект.