Как мы применяем Непрерывную Интеграцию и Непрерывное Развертывание для автоматизации разработки ПО

Наша компания постоянно развивается. Внедряются инновационные технологии и практики, которые помогают нам улучшить и автоматизировать процесс разработки программного обеспечения. Применяя такие передовые технологии как Kotlin, Swift и React Native, наши инженеры ПО создают качественные мобильные и веб-решения. 

Однако помимо инструментов разработки существует ряд подходов, которые позволяют упростить реализацию проектов. Один из них — использование непрерывной интеграции (continuous integration — CI) и непрерывного развертывания (continuous deployment — CD). Недавно мы применили данный подход для создания Neurosonic, IoT-проекта для управления устройствами компании. Вы можете узнать о запуске этого IoT-решения в нашем кейс стади

В статье мы расскажем вам о применении непрерывной интеграции и непрерывного развертывания для автоматизации разработки ПО на примере Neurosonic. 

В чем заключалась проблема

Neurosonic представляет собой IoT-проект, который позволяет пользователям подсоединяться к продуктам компании — предметам мебели — и управлять ими через Bluetooth.  

Многочисленные микродвигатели, встроенные в матрас, создают вибрации, оказывающие благотворное воздействие на нервную систему и нормализующие кровоток. Решение Neurosonic предназначено для расслабления, борьбы с бессонницей и ослабления боли в суставах, спине и пояснице.

Несмотря на то, что все начиналось с простой версии мобильного продукта, сейчас система объединяет приложения для корпоративных клиентов и партнеров и имеет сложную инфраструктуру. Особенностью данного проекта  является наличие большого количества комбинаций его сборок. 

Это и версия приложения, и бренд, для которого это приложение предназначается, а также включение и отключение различных частей функциональности. Уже только при наличии трех версий приложения существует 288 различных комбинаций конечной сборки, и данное число будет только расти. 

В результате по любому требованию программист должен вручную собирать конкретную сборку приложения и отправлять ее заказчику, что занимает время. 

Более того, стоит учитывать, что по названию файла сложно определить, какая именно комбинация сокрыта в данной сборке, поэтому приходится вручную вести учет версий и различных параметров, а иногда и вовсе собирать приложение заново.

Все это заставило нас подумать о возможных путях автоматизации процесса создания сборок приложения и их отправки заказчику. И именно на этом этапе было принято решения реализовать подход непрерывной интеграции и непрерывного развертывания (CICD). 

Что такое Непрерывная Интеграция

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

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

Применение непрерывной интеграции предлагает возможность освободить команду разработки от многих тривиальных задач по сборке проекта. Более того, данная практика приводит к отсутствию трудоемкой интеграции и хаоса в даты запуска продукта. Она также позволяет инженерам минимизировать время на отладку и сосредоточиться на создании функциональности вашего программного решения.

Непрерывное Развертывание и его преимущества

Непрерывное развертывание — это расширение для непрерывной интеграции, суть которого — автоматизировать доставку новых изменений заказчику. Данное решение способствует получению скорейшей обратной связи со стороны клиента и освобождает программиста от различных задач.

В двух словах, непрерывное развертывание работает следующим образом: каждое изменение кода проходит автоматические тесты, что приводит к сборке билдов приложений. Затем он вводится в стадию производства через множество развертываний. Такой подход позволяет мобильным и веб-разработчикам быстрее и проще создавать, тестировать и развертывать приложения.

Дело в том, что из-за использования непрерывного развертывания время выполнения задач уменьшается. Как следствие, нам нужно меньше времени для создания более качественных приложений. Риск ниже, так как ошибки быстро обнаруживаются благодаря частым развертываниям.

Следует отметить, что вы можете собирать и анализировать отзывы пользователей для каждого нового изменения или функции на проекте. Можно воспользоваться A/B-тестированием, чтобы понять потребности своей аудитории и увидеть, что ей нравится, а что нет, а затем использовать это знание для разработки идеального продукта.

Как наши разработчики внедрили CICD

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

 
Собственный сервер

➕ Больше контроля над процессами

➖ Сложность поддержки

➖ Сложность развертывания приложения

➖ Необходимость приобретения дополнительного оборудования

 
Сторонний сервер

➕ Наличие подробной документации по интеграции

➕ Техническая поддержка

➕ Надежность, поскольку поставщик уже проверил работу сервиса

➖ Арендная плата

 
Исходя из вышеперечисленных аргументов, было решено использовать сторонний сервер, а именно CircleCI. Важным фактором, повлиявшим на наш выбор, была возможность попробовать сервис бесплатно и протестировать производительность и простоту интеграции перед началом работы.

Программисты добавили проект на Bitbucket (данный инструмент предоставляет разработчикам возможность планировать свои проекты, совместно работать над написанием кода, а также тестировать и развертывать приложения) в CircleCI. 

Следующий шаг заключался в настройке файла конфигурации .yml и указании некоторых параметров и шагов, которые будут выполняться при появлении нового коммита (скачать зависимости, собрать билд, сохранить билд для дальнейшего скачивания).

Затем мы сделали так, чтобы API данного сервиса мог “стучаться и просить” собрать билд и отслеживать его состояние. Когда это было сделано, команда добавила необходимые странички в панель администратора, использовала свои запросы и все заработало. 

Пользователь задает параметры, далее с этими параметрами идет запрос на CircleCI и данные параметры указываются как переменные окружения. Приложение находит эти переменные окружения и в соотственнии с ними формируется нужный билд. После того как он собран, разработчики видят ссылку и скачивают билд в Google Drive и шарят ссылку на него в панель админа.

Что получилось 

После добавления проекта в систему CircleCI была произведена настройка конфигурационных файлов для автоматизации сборок и были выполнены все необходимые интеграционные проверки. 

Далее мы добавили страничку с возможностью выбора конфигурации и запуском сборки приложения. После того как администратор (заказчик) кликает на кнопку “Собрать”, на другой похожей странице появляется новая запись, где мы можем наблюдать текущий статус выполнения задачи по сборке приложения.

В случае успеха появится ссылка на нужный файл, который можно скачать. В случае неудачи разработчик будет сразу же проинформирован и сможет в кратчайшие сроки приступить к исправлению ошибки.

В заключение

Как видите, непрерывное развертывание + непрерывная интеграция — отличная практика мобильной и веб-разработки, которая позволяет программистам быстрее создавать, тестировать и развертывать свои приложения. 

Что важно, вы экономите свое время и бюджет благодаря автоматизации. Более того, вы получаете более качественный продукт. Мы собираемся использовать подход CICD во всех наших проектах для ускорения процесса создания ПО и доставки новых изменений клиентам.

Надеемся, статья была вам полезна. Если у вас есть вопросы по теме или идея проекта, обращайтесь к нам. Имея большой опыт в решении задач заказчиков, мы будем рады помочь вам!

Поделиться

Последние статьи

The foundation of OZiTAG, a custom web development company

Как мы применяем Непрерывную Интеграцию и Непрерывное Развертывание для автоматизации разработки ПО

8 способов применения Интернета вещей в производстве

OZiTAG признана лидирующей компанией по мобильной и веб-разработке

Штатный дизайнер vs дизайн-студия: Почему мы выбрали второе и что лучше для клиента

Как мы запустили социальную сеть для создания, поиска и посещения мероприятий

Как проходит тестирование программного обеспечения в нашей компании

OZiTAG выступила партнером студенческой IT Олимпиады Bit-Cup 2018!

Как IoT-проект Neurosonic привлек клиентов из США, Европы, Азии, Великобритании на Orgatec

Как мы создали IoT-решение для управления продуктами & релаксации