Спрашивая многих моих друзей-разработчиков, мне кажется, что CI и CD – это две практики, которые люди либо уже используют, либо хотели бы использовать. Разработчики повсеместно любят выпускать свои новые функции, это приятная часть работы. В идеальном мире мы могли бы постоянно выпускать функции, но по мере усложнения проектов и роста пользователей этот поспешный шаг к освоению становится слишком рискованным.
В этом посте объясняется, что я обнаружил при использовании флагов функций и почему группа Solid State оказалась с открытым исходным кодом https://bullet-train.io .
Сокращение циклов высвобождения и стресса
Поработав над проектами с циклами выпуска в течение нескольких месяцев, я нашел большое облегчение, используя этот подход. Ранее я обнаружил следующее:
- UAT включал в себя обширное тестирование нескольких взаимосвязанных неизданных функций.
- Исправления, которые не могли ждать, должны быть объединены, они были бы применены к производственному коду и могут конфликтовать/оказывать побочные эффекты на застоявшийся код.
- Когда так много всего происходит, трудно отследить, что именно входит в выпуск.
- Казалось бы, незначительные функции слишком долго выпускались, просиживая там неделями, не принося пользы.
- Последствия релизов часто были довольно высокими, выпуск большого количества сразу несет в себе риск взрыва приложения, требующий отката в тяжелых случаях.
Проще говоря, большие релизы дороги и сложны. Освобождение часто уменьшает багаж и, по иронии судьбы, риск.
Что такое “флаги функций”
Что меня удивило, так это то, что, хотя люди, с которыми я разговаривал, очень позитивно относились к этим практикам, только около половины из них слышали о флагах функций. Это означает, что функции могут быть запущены в производство, но не включаться до тех пор, пока это не потребуется.
Флаг функции – это способ отключить некоторые функции вашего приложения с помощью конфигурации без развертывания нового кода. Если вы используете CI/CD и часто выпускаете, они очень важны.
Почему “флаги функций” имеют значение
Для меня возможность управлять функциями за пределами моей кодовой базы и даже включать их для внутренних пользователей в производстве идеально подходит для этой практики. Существует несколько сервисов флагов функций, которые могут похвастаться рядом преимуществ:
- Отделяйте выпуски кода от развертывания функций
- Вводит возможность тестирования кода в рабочей среде с постепенным/целенаправленным внедрением
- Позволяет нетехническим членам команды управлять выпусками функций
- Позволяет тестировать функции на ранней стадии и на основе незагрязненного кода.
- Позволяет вводить бета-версии программ для получения ранней обратной связи с пользователями.
- Уменьшает необходимость отката кода с возможностью удаленного отключения функций.
Где не хватает флагов функций
Здорово иметь возможность включать и выключать функции без выполнения сборки, но с некоторыми функциями это не так просто. Вот где появляется удаленная конфигурация . Часто возникает необходимость настроить свойства функций, например, обновить некоторый текст, чтобы продвигать продажу валюты в приложении. Для мобильных приложений я ранее использовал удаленную конфигурацию Firebase, что часто означало разницу между ожиданием 2 или более дней совместной сборки iOS и Android.
Представляем скоростной поезд
Поскольку мы увидели большие преимущества в использовании как флагов функций, так и удаленной конфигурации, мы решили создать наш собственный внутренний продукт. Это означало бы, что мы могли бы использовать наши существующие веб-сайты/мобильные приложения и использовать более последовательный/формальный подход к проделанной нами работе.
Мы не смогли найти ни одной системы, которая сочетала бы два подхода, которые мы использовали. Продукты, которые были близки к таким, как LaunchDarkly, были далеко за пределами нашего ценового диапазона и на самом деле не предлагали того, что мы хотели.
Платформа на 100 % с открытым исходным кодом и имеет пакеты SDK JavaScript, React Native, Node JS и Java, так что вы можете самостоятельно разместить все это, если хотите. Мы также размещаем интерфейс API и администрирования для людей, чтобы люди могли попробовать. Мы даже использовали его для разработки сверхскоростного поезда! Не стесняйтесь оставлять отзывы на сайте по адресу bullettrain@solidstategroup.com .
Счастливого Развития!
Оригинал: “https://dev.to/kylessg/bullet-train-using-feature-flags-and-remote-config-in-ci-2gda”