Хотите построить полноценный конвейер 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.

Как вы можете видеть, thesonarjob зависит от testsjob, что означает, что после сбоя testsjob работаsonarjob не будет выполняться.

Что касается свойств сонара, я решил передать их как параметры в 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