Внедрение Continuous Integration

О клиенте:

Стартап, небольшая команда по разработке мультиплатформенного приложения.

 

Описание проекта:

Основная проблема и боль разработчиков ПО, мобильных приложений, а также игровой отрасли — это скорость выкладки версий.

На первоначальных этапах развития проекта по разработке самая простая схема может быть вполне рабочей и адекватной:

  1. написание кода разработчиком
  2. сборка кода вручную на машине разработчика
  3. ручной запуск всех скриптов и бинарников
  4. обработка ошибок и предупреждений
  5. отладка кода исходя из полученных ошибок и предупреждений
  6. отправка на тестирование

Эта схема не требует сложных решений, она простая и вполне рабочая.

Но ровно до тех пор, пока размер команды и масштаб разработки не увеличится.

Однако есть явные минусы:

  • процесс компиляции — ресурсоемкий, отнимает время, нагружает компьютер разработчика
  • для сборки нужно вручную запускать множество скриптов, может сыграть человеческий фактор — по какой-либо причине можно забыть запустить какой-либо скрипт или не собрать какой-либо кусок кода
  • в случае возрастания сложности и объемов разработки — потери времени на компиляцию сильно возрастают, сложность отладки увеличивается, вероятность ошибок в сборке также растет

 

Внедрение Continuous Integration/Deployment

Самый популярный инструмент для внедрения Coutinuous Integration — это автоматизация Ansible, но кроме этого может использоваться и Jenkins.

 

Как это работает?

  • сборка кода осуществляется на специально выделенном сервере или на отдельных ресурсах, поэтому потери времени и ресурсов разработчика исключены
  • процесс компиляции происходит гораздо быстрее, т. к. мощность сервера выше мощности компьютера разработчика
  • сборка всегда происходит одинаково, скрипт не может «забыть» собрать какой-либо кусок кода или подгрузить бинарник
  • тестирование также всегда происходит одинаково по заложенным правилам
  • отчет по сборке с перечнем ошибок и предупреждений может отправляться разработчику или в QA любым удобным способом, например на электронную почту

Результат:

  1. В корне изменилась концепция программирования: раньше сборка кода требовала много времени, поэтому разработчики работали над крупными частями кода, отправляя их по мере готовности. С внедрением CI разработка идет короткими кусками кода, которые отправляются на сборку несколько раз в течение дня.
  2. Работа идет короткими итерациями, поэтому отлаживать и работать над с ошибками/предупреждениями стало гораздо проще. Разобраться с ошибками на коротком куске кода гораздо проще.
  3. Компиляция и тестирование не отнимает время и ресурсы разработчиков, в это время они могут заняться чем-либо другим, а результат тестирования получить по готовности на почту

Таким образом, CI значительно экономит ресурсы, а также повышает эффективность и качество разработки.