Был установлен мониторинг, проведен аудит инфраструктуры. После сбора данных было сделано предложения по описанию инфраструктуры средствами автоматической поддержки конфигураций (Ansible). Реализована отказоустойчивая и безопасная система резервирования-восстановления данных, с хранением на независимых серверах (на трех нодах).
После реализации описания инфраструктуры кодом Ansible и внедрения системы резервного копирования было предложено реализовать CI/CD.
Основная проблема и боль разработчиков ПО — это скорость выкладки версий.
На первоначальных этапах развития проекта по разработке самая простая схема может быть вполне рабочей и адекватной:
- Написание кода разработчиком
- Сборка кода вручную на машине разработчика
- Ручной запуск всех скриптов и бинарников
- Обработка ошибок и предупреждений
- Отладка кода исходя из полученных ошибок и предупреждений
- Отправка на тестирование
Эта схема не требует сложных решений, она простая и вполне рабочая. Но ровно до тех пор, пока размер команды и масштаб разработки не увеличится.
Однако есть явные минусы: — Процесс компиляции — ресурсоемкий, отнимает время, нагружает компьютер разработчика
— Для сборки нужно вручную запускать множество скриптов, может сыграть человеческий фактор — по какой-либо причине можно забыть запустить какой-либо скрипт или не собрать какой-либо кусок кода
— В случае возрастания сложности и объемов разработки — потери времени на компиляцию сильно возрастают, сложность отладки увеличивается, вероятность ошибок в сборке также растет
Внедрение Continuous Integration/Deployment Самый популярный инструмент для внедрения Continuous Integration — это автоматизация Ansible, но кроме этого может использоваться и Jenkins.
Как это работает?— Сборка кода осуществляется на специально выделенном сервере или на отдельных ресурсах, поэтому потери времени и ресурсов разработчика исключены
— Процесс компиляции происходит гораздо быстрее, т. к. мощность сервера выше мощности компьютера разработчика
— Сборка всегда происходит одинаково, скрипт не может «забыть» собрать какой-либо кусок кода или подгрузить бинарник
— Тестирование также всегда происходит одинаково по заложенным правилам
— Отчет по сборке с перечнем ошибок и предупреждений может отправляться разработчику или в QA любым удобным способом, например на электронную почту
Результат:- В корне изменилась концепция программирования: раньше сборка кода требовала много времени, поэтому разработчики работали над крупными частями кода, отправляя их по мере готовности. С внедрением CI разработка идет короткими кусками кода, которые отправляются на сборку несколько раз в течение дня.
- Работа идет короткими итерациями, поэтому отлаживать и работать над ошибками/предупреждениями стало гораздо проще и быстрее. Разобраться с ошибками на коротком куске кода можно более оперативно.
- Компиляция и тестирование не отнимает время и ресурсы разработчиков, в это время они могут заняться чем-либо другим, а результат тестирования получить по готовности на почту.
Таким образом, CI значительно экономит ресурсы, а также повышает эффективность и качество разработки.