Флаги функций являются необходимой и вездесущей частью современной разработки программного обеспечения. По мере того, как ваша компания и сложность вашего приложения растет, становится необходимым, чтобы иметь возможность контролировать, какие функции доступны для ваших внутренних команд разработки, заинтересованных сторон и клиентов. В долгосрочной перспективе у нас была бы просто переменная, которую вы бы переключали между True и False, чтобы контролировать поведение вашего приложения. Однако по мере того, как разработка приложений перешла в Интернет, нам нужен тот же тип управления, за исключением того, что флаги с твердыми функциями просто не собирались его сокращать. Введите динамические флаги функций!
Динамические флаги функций были большим улучшением по сравнению с статическими флагами функций, но также добавили сложность и представляли проблемы, отличные от статических флагов. Ушли в жесткие флаги, но они были заменены на заявления и, что более важно, извлекит соответствующие флаги для вашего приложения. Большинство людей начали с катания своих собственных, но по мере развития с флагами функций приобрели популярность, многие разные компании сталкивались с тем, чтобы решить проблемы:
- Один интерфейс для управления вашим флагом
- Легкое обслуживание ваших флагов
- Очень быстрый и надежный поиск ваших флагов
- Разделение трафика на той или иной функции
В то время как такие компании, как LaunchDarkly, Optimizely, Rollout, Split.io и другие, сделали это довольно легко создавать и управлять этими флагами, это не решает все ваши проблемы. Многие программные организации, особенно по мере того, как они растут, нужно много средств для тестирования. Это создает проблему для настройки флага вашей функции специально, если ваши среды являются эфемерными.
Эфемерные среды похожи на любую среду, за исключением того, что они будут удалены в относительно короткое время в отличие от вашей стадии или производственной среды. Хорошие примеры:
- Особенности филиалов
- Демонстрации продаж
- Нагрузочное тестирование
- Рефактории
Эти среды могут длиться не долго, но они чрезвычайно важны и могут быть такими же сложными, как производство. В то время как демонстрационная среда продаж может функционировать с помощью данных семян, среде тестирования нагрузки потребует производственных или производственных данных, а также множество реплик каждой услуги, чтобы дать достоверный результат. Они могут быть очень сложными для создания и управления, и их эфемерная природа может быть разрушением с помощью вашего флага функций.
Функционируют среды флагма на спасение … вроде
LaunchDarkly (и другие) признала эту проблему и создал концепцию среды в своих собственных приложениях. Вы можете прочитать об их реализации здесь. У них есть API, которые позволяют вам создавать и манипулировать этими наборами флагов функций в среде по окружающей среде. Это прекрасно работает, если у вас есть конечный набор сред, и их набор не часто меняется, но с эфемерными средами способность вращать их вверх и вниз является функцией, а не ошибкой.
Чтобы упростить эту проблему, большинство людей создают два вида среда в своем любимом поставщике флагов функций: один для разработки (или теста) и один для производства. В более крупных организациях команды разработчиков могут иметь несколько, таких как разработка, тест, UAT, постановка и производство. Это работает нормально, если вы не хотите добавлять еще один, или вы никогда не делаете решающий шаг в отношении действительно эфемерных сред.
После того, как вы переходите в эфемерную среду, большинство людей примечают краткий промежуток времени назначения каждой эфемерной среды в единую среду флага, которая достаточно проста, но создает большую проблему с людьми, которые наступают на пальцы друг друга.
Представьте, что у вас есть 10 сред, указывающие на одну базу данных с записями, происходящими из всех этих сред: здесь такая же проблема. Самое замечательное в флагах функций — это возможность переключать их и видеть другое поведение, но если каждая среда указывает на ту же самую проблему, у вас теперь есть другая проблема по борьбе с ресурсом. Если вы включите, показываете «на», что остановить своего коллега отключить его «отключить»? Любые проблемы, которые у вас есть в среде постоянной стадии, увеличиваются в эфемерных средах.
Лучшее решение было бы в создании эфемерной среды, которую вы создадите в запуске, основанной на чем -то уникальном в вашей эфемерной среде, и когда она появится, вы убедитесь, что он использовал уникальный API SDK для этой конкретной среды флага функций. Анкет Давайте внедрим рабочий процесс и посмотрим, как это будет работать с выпуском!
Работа с эфемерными средами
Чтобы попробовать это с выпуском, нам нужен репозиторий с файлом Docker, который реализовал флаги функций с LaunchDarkly. Я собираюсь использовать это Репозиторий на GitHub, и вы можете сделать то же самое, сначала подтягивая репозиторий, чтобы вы могли использовать его для создания приложения с выпуском.
После того, как вы разделили репозиторий, вы можете перейти к relesshub.com и вход в систему с использованием GitHub, чтобы следовать этим примеру.
Шаги по созданию наших эфемерных сред, созданных в выпуске при поддержке среды в LaunchDarkly:
- Создайте наше приложение в выпуске
- Создайте работу с выпуском, чтобы создать среду в LaunchDarkly
- Добавьте некоторые переменные среды, чтобы приложение мог связаться с запуск и привлечь ключ SDK API из нашей недавно созданной среды LaunchDarkly
- Развернуть нашу эфемерную среду
Если у вас нет учетной записи Darkly запуска, вы можете создать его бесплатно в течение 30 дней для использования для этого примера. Вам также нужно будет создать хотя бы один флаг функций. Если у вас уже есть учетная запись Darkly с множеством флагов функций, вы можете просто пропустить этот шаг.
Создайте приложение в выпуске
После того, как мы вошли в выпуск, мы хотим нажать Создать новое приложение в левой боковой панели. После этого нам будет представлено создание нового рабочего процесса приложения.
Во -первых, мы нажмите кнопку «Обновление», чтобы найти наш недавно раздвоенный репозиторий. Затем мы выберем этот репозиторий и «Docker» для службы «API». Наконец, назовите свое приложение. После того, как вы закончите нажмите кнопку «Шаблон« генерировать приложение ».
Наконец, назовите свое приложение и генерируйте шаблон для вашей конфигурации.
Измените шаблон приложения
Прежде чем мы сможем развернуть нашу среду (ы), нам нужно внести изменения в наш шаблон приложения и добавить несколько переменных среды. Нам также необходимо создать работу, которая создаст нашу среду LaunchDarkly при первоначальном развертывании среды. Работа в выпуске описана подробно Здесь Анкет TL; DR — это то, что с небольшим количеством конфигурации вы можете запустить любой произвольный сценарий или задачу в контейнере. Например, эти задания очень полезны для проведения миграций перед развертыванием вашего бэкэнд -сервиса. В этом случае мы запустим задачу Rake, чтобы настроить нашу среду LaunchDarkly.
jobs: - name: create-launch-darkly-env from_services: api args: - bundle - exec - rake - launch_darkly:create_environment
Приведенный выше YAML представляет собой работу в выпуске
Мы разместим вышеупомянутые строки прямо перед строфы «Услуги» в нашем шаблоне приложения.
memory: limits: 1Gi requests: 100Mi replicas: 1 jobs: - name: create-launch-darkly-env from_services: api args: - bundle - exec - rake - launch_darkly:create_environment services: - name: api image: erik-opsnuts-test-001/rails_postgres_redis/api has_repo: true static: false
Поместите фрагмент заданий в шаблон приложения
Чтобы релиз использовать эту работу как часть рабочего процесса для развертывания среды, нам нужно будет добавить одну строку рядом с нижней частью файла в разделе «Рабочие процессы». В разделе «Настройка»: ‘order_from’ Мы добавим jobs.create-launch-darkly-env Анкет Затем нажмите «Сохраните и продолжайте».
workflows: - name: setup order_from: - jobs.create-launch-darkly-env - services.all - name: patch order_from: - services.api - services.sidekiq - services.db - services.redis
Поместите работу. строфа
Это вся необходимая конфигурация, теперь нам просто нужно добавить две переменные среды, прежде чем мы развертываем!
Добавление переменных среды
Нажмите «Редактировать» для «переменных среды по умолчанию», чтобы поднять редактор. Мы добавим две переменные среды, которые содержат информацию о LaunchDarkly. Они есть:
Запуск_даркли_апи_КИ : Ваш клавиш API LaunchDarkly, который находится здесь. Если у вас нет токена API, создайте кнопку «+ Токен», чтобы сделать ее. Вы захотите дать ему привилегии администратора. Если вы не можете сделать это, свяжитесь с вашим администратором. После того, как вы создаете его, убедитесь, что вы скопируете его и вставьте куда -нибудь, вы можете получить его. Запуск Darkly будет запутать ваш токен, и если вы не сохраните его где -то, вам нужно будет генерировать новый.
Запуск_даркли_Проям_name : Мы просто будем использовать «по умолчанию» для этого примера, но если есть еще один проект, вы хотели бы проверить, не стесняйтесь.
defaults: - key: POSTGRES_USER value: postgres - key: POSTGRES_PASSWORD value: postgres - key: LAUNCH_DARKLY_PROJECT_NAME value: default - key: LAUNCH_DARKLY_API_KEY value: your-api-key secret: true
Нажмите «Сохранить», чтобы сохранить переменные среды как часть конфигурации приложения. Затем нажмите «Создать и развернуть». Вы будете перенаправлены на приборную панель активности для этого приложения, и на заднем плане была запущена сборка Docker. За этим последует развертывание среды для вашего приложения. Вы можете просмотреть сборку и развертывание в разделе «сборки» и «развертывания» соответственно.
Ваша среда
Этот процесс выполнения сборки Docker займет несколько минут в первый раз. После того, как сборка и развертывание завершится, вы можете найти URL -адрес вашей новой среды, нажав на «среды» слева, а затем нажав в свою новую среду.
После того, как вы нажмете на URL -адрес для вашей недавно созданной эфемерной среды, в вашем браузере откроется еще одно окно в примере Rails с Postgres и Redis. Это должно выглядеть примерно так:
Если у вас есть флаг с именем «тест-флаг» в вашей учетной записи Darkly, вы можете пойти дальше и переключить его от «false» до «true» и наоборот и перезагрузить свою среду, чтобы увидеть изменения. Если вы хотите использовать другой флаг, вам нужно только внести один изменение: app/views/gloving/index.html.erb
< %. configuration.ld_client.variation («test-flag», {key: «user@test.com»}, false) %>
После того, как вы изменили «тест-флаг» на имя флага по вашему выбору, вам нужно только совершить и перенести изменения в GitHub. Как только это произойдет, выпуск автоматически сделает сборку, а затем развернет ваши изменения. Когда процесс завершится, вы сможете увидеть изменение страницы приветствия на основе вашего нового флага.
В вашем интерфейсе запуска выпуска вы увидите вновь созданную среду с названием формы TEDFE34. Это имя такое же, как у вашего Release_env_id Переменная среда, которую выпуск создает автоматически для вашей новой среды. Вы увидите это значение в нескольких местах в пользовательском интерфейсе релиза, кроме редактора переменных среды.
Заключение — что дальше?
Теперь, когда вы можете получить нетронутые функции флагов, посвященные средам выпуска, что дальше? В этом примере очистка должна быть выполнена вручную, а не огромная сделка, но мы можем добиться большего. В ближайшем будущем релиз будет реализовать более глубокую интеграцию с LaunchDarkly, чтобы сделать это бесшовным и управлять средами в LaunchDarkly, когда ваша среда выпуска будет удалена.
Следите за интеграциями с другими поставщиками флагов в будущем. Если вы хотите иметь среды для ваших приложений, которые быстрые, простые в определении и невероятно мощном, отправьте нам записку по адресу support@reeleashub.com, и мы поможем вам и вашей команде стать более эффективными, используя эфемерные среды с выпуском.
О выпуске
Выпуск — самый простой способ раскрутить даже самые сложные среды. Мы специализируем его, принимая ваше сложное приложение и данные и делая воспроизводимые среды по требованию.
Изображение героя Денис Невожа, на Неспособный
Оригинал: «https://dev.to/elanderholm/feature-flags-and-ephemeral-environments-n23»