Хотите построить полноценный конвейер CI / CD? Что ж, вы попали в нужное место!
CI / CD - это подход, который увеличивает частоту распространения приложений за счет автоматизации на этапе разработки приложений.
Основные концепции, связанные с подходом CI / CD, - это непрерывная интеграция, непрерывное распространение и непрерывное развертывание. CI / CD представляет собой решение проблем, связанных с интеграцией новых сегментов кода для команд разработки и эксплуатации (так называемый «ад интеграции»).
В частности, CI / CD обеспечивает непрерывную автоматизацию и мониторинг на протяжении всего жизненного цикла приложения, от этапов интеграции и тестирования до распространения и развертывания. Вместе эти методы часто называют конвейером CI / CD, и они полагаются на гибкое сотрудничество между группами разработки и эксплуатации.
В этом руководстве мы создадим небольшое приложение SpringBoot, а затем создадим полный конвейер CI / CD с помощью GitHub Actions и AWS BeanStalk 🔥.
Приступим к созданию приложения 🏗️
В нашем приложении будут следующие сценарии:
- Получите случайные нации
- Получайте случайные валюты
- Получить версию приложения
- проверка состояния здоровья
Мы создадим наш проект с помощью Spring Initializr.
В нашем случае нам нужна только веб-зависимость Spring.
После создания проекта добавьте его в свою любимую IDE 😎.
Я буду использовать библиотеку Java Faker для получения случайных данных, поэтому нам нужно добавить следующую зависимость в наш pom файл.
Теперь давайте создадим наш класс DataController:
Теперь, когда мы закончили сборку приложения, мы можем запустить его и проверить, все ли в порядке 👌.
Наше приложение готово к использованию 😁. Я собираюсь использовать Почтальон, чтобы проверить это ».
Получить случайные страны:
Получить случайные валюты:
Получить версию приложения:
проверка работоспособности:
Теперь давайте добавим модульные тесты в наш RestController:
Отлично, теперь у нас есть хорошо протестированное приложение SpringBoot, готовое к развертыванию 👌. Итак, приступим к созданию конвейера CI / CD.
В этом руководстве мы собираемся использовать действия GitHub для создания нашего конвейера 🔥.
Действия GitHub - это инструмент для автоматизации рабочего процесса от кода до рабочей среды.
GitHub Actions упрощает автоматизацию всех ваших программных рабочих процессов, теперь с CI / CD мирового класса. Создавайте, тестируйте и развертывайте свой код прямо из GitHub. Сделайте так, как вы хотите, чтобы проверки кода, управление филиалами и сортировка проблем выполнялись так, как вы хотите.
Сначала нам нужно создать файл .github/workflows/build.yml
.
В приведенном выше файле у нас есть конвейер с именем CI/CD Pipeline
, он будет запускаться вручную или при обнаружении нажатия на основную ветвь.
Этот конвейер содержит одно задание с именем tests
с меткой имени Unit tests
, это задание состоит из нескольких шагов. Сначала он настроит JDK 11, затем настроит кеш maven и, наконец, запустит тесты приложения.
Теперь давайте протестируем наш конвейер и посмотрим, что будет.
Я отправлю файл build.yml, и рабочий процесс запустится автоматически.
Теперь перейдите в репозиторий Github и нажмите «Действия». Вы найдете статус конвейера и журналы шагов.
Круто, все отлично работает.
Вы также можете запустить конвейер вручную в любое время 😉.
Теперь перейдем к следующему шагу, на котором мы добавим анализ сонара в наш конвейер 😎.
В этом уроке мы будем использовать SonarCloud.
SonarCloud - это ведущий онлайн-сервис для обнаружения ошибок и уязвимостей безопасности в ваших репозиториях кода.
Нажмите кнопку входа в систему, затем используйте Github.
В первый раз Github попросит вас предоставить разрешение для SonarCloud, а затем попросит вас создать организацию.
Затем вам будет предложено выбрать доступ к репозиторию, либо вы предоставляете доступ ко всем репозиториям, либо выбираете конкретный репозиторий.
Затем репозиторий будет импортирован в SonarCloud.
Выбираем наш репозиторий и начинаем настройку 😄.
Теперь мы выбираем метод анализа, в нашем случае он будет использовать Github Actions 😎.
Теперь SonarCloud дает нам SONAR_TOKEN
, который нужно добавить в наши секреты репозитория.
После этого мы переходим к следующему шагу. SonarCloud предоставит нам свойства и конфигурации для конвейера.
Я адаптирую эту конфигурацию в соответствии с нашими потребностями 😎.
в файл build.yml
мы добавим новое задание с именем sonar
.
Как вы можете видеть, thesonar
job зависит от tests
job, что означает, что после сбоя tests
job работаsonar
job не будет выполняться.
Что касается свойств сонара, я решил передать их как параметры в themvn -B verify
command.
Теперь, когда все в порядке, давайте взглянем на SonarCloud, чтобы увидеть, что произошло.
Все выглядит хорошо, кроме покрытия, почему 0%, хотя мы добавили модульные тесты 🤔 🤔
Не волнуйтесь, это потому, что нам нужно добавить плагин Jacoco в наш pom-файл.
Круто, теперь все в зеленом 💪.
После задания модульного тестирования и задания сонара мы добавим еще одно задание для создания нашего приложения и создания файла jar 😀.
Это задание построит приложение с использованием maven и загрузит файл jar.
Шаг загрузки артефакта позволяет нам обмениваться данными между заданиями и сохранять данные после завершения рабочего процесса. В нашем случае мы будем использовать загруженный файл jar в задании развертывания.
Работа завершена 😎 😎.
Вы даже можете увидеть сгенерированный файл в части артефактов, вы также можете загрузить его и запустить на своем локальном компьютере.
Теперь перейдем к последнему шагу - развертыванию приложения.
Для развертывания мы собираемся использовать AWS Elastic Beanstalk.
AWS Elastic Beanstalk - это простой в использовании сервис для развертывания и масштабирования веб-приложений и сервисов.
С помощью Elastic Beanstalk вы можете быстро развертывать приложения в облаке AWS и управлять ими без необходимости изучать инфраструктуру, в которой выполняются эти приложения. Elastic Beanstalk снижает сложность управления без ограничения выбора или контроля. Вы просто загружаете свое приложение, и Elastic Beanstalk автоматически обрабатывает детали выделения емкости, балансировки нагрузки, масштабирования и мониторинга работоспособности приложения.
Теперь давайте создадим нашу среду развертывания 😊
Сначала нам нужно подключиться к учетной записи AWS, затем мы выбираем сервис Elastic Beanstalk.
затем нажмите Создать приложение
Затем мы помещаем информацию о приложении, такую как имя приложения и тип платформы, а также то, как мы собираемся работать с кодом.
В нашем случае мы собираемся поместить:
✅ Название приложения: spring-boot-deploy
✅ Платформа: Java Corretto 11 V3.1.8
✅ Код приложения: образец приложения
Затем нажмите Создать приложение.
Создание окружения займет несколько минут ⏳ ⏳
Когда среда будет готова, она будет выглядеть так
Отлично, теперь у нас есть среда, готовая к использованию.
Как упоминалось выше, AWS предоставляет нам общедоступный адрес для доступа к нашему приложению из Интернета.
🌍 http://springbootdeploy-env.eba-yrcapidh.us-east-1.elasticbeanstalk.com
По умолчанию веб-сайт покажет вам это.
Теперь давайте создадим задание развертывания.
Во-первых, вам нужно добавить AWS_ACCESS_KEY_ID
, AWS_SECRET_ACCESS_KEY
, AWS_SESSION_TOKEN
в секреты GitHub.
use_existing_version_if_available
: можно установить значениеtrue
, и тогда программа развернет версию, уже существующую в Elastic Beanstalk, если она существует, но если она не существует, она создаст ее из указанного вами пакета развертывания.
Итак, здесь задание загрузит файл jar, который был загружен в задание сборки, и развернет его в AWS EB.
Теперь наш конвейер готов, давайте протестируем его.
Круто, похоже, давайте зайдем в наше приложение.
Ой, не работает, что-то не так 😱😱.
Не волнуйтесь, это происходит потому, что балансировщик нагрузки приложения по умолчанию указывает на порт 80 сервера Nginx в экземпляре EC2. Nginx настроен на пересылку запросов на порт 5000 по умолчанию, тогда как наш сервер приложений работает на порту 8080.
Чтобы решить эту проблему, мы отредактируем порт сервера в application.properties
server.port=5000
А теперь давайте еще раз проверим приложение.
🌍 http://springbootdeploy-env.eba-yrcapidh.us-east-1.elasticbeanstalk.com
🌍 http://springbootdeploy-env.eba-yrcapidh.us-east-1.elasticbeanstalk.com / nation
Все работает правильно 🥳
В этом руководстве мы узнали, как создать полный конвейер CI / CD, от создания приложения до развертывания приложения 💪
Все исходники проекта доступны на моей странице GitHub:
Спасибо за чтение! 🙏
Больше контента на plainenglish.io