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