Привет, коллеги! Сегодня мы рассмотрим одну из самых полезных практик, которая спасла мне не один проект — Feature Toggles в GitLab CI/CD. Это те самые переключатели, которые позволяют активировать или деактивировать функции без повторного развертывания кода.
Основная польза:
-
Быстрое развертывание незавершенных фич: код в проде, но скрыт от пользователей.
-
A/B тестирование: включаем новую фичу для определенной группы пользователей.
-
Безопасное отключение: если что‑то пошло не так, можем быстро откатиться.
Перейдем сразу к реализации.
Реализация Feature Toggles в GitLab CI/CD
В настройках проекта GitLab переходим в Settings > CI/CD > Variables и добавляем переменную:
-
KEY:
FEATURE_NEW_COOL_STUFF
-
Value:
true
Не забудьте установить флажок «Protect variable», чтобы переменная была доступна только защищенным веткам.
Теперь в нашем приложении (предположим, на Python) мы можем использовать эту переменную:
import os if os.getenv('FEATURE_NEW_COOL_STUFF') == 'true': # Включаем новую фичу def new_cool_feature(): print("Новая крутая фича активирована!") else: # Старое поведение def new_cool_feature(): print("Старая добрая функциональность.")
Добавим использование переменной в наш CI/CD пайплайн:
stages: - deploy deploy_production: stage: deploy script: - echo "Разворачиваем приложение..." - echo "Переменная FEATURE_NEW_COOL_STUFF: $FEATURE_NEW_COOL_STUFF" - python deploy.py only: - master environment: name: production
Делаем фичу динамически переключаемой
Хорошо, переменную задали, но что, если нам нужно менять состояние фичи без редеплоя? Тут на помощь приходит хранение конфигурации вне приложения, например, в Redis или базе данных.
Предположим, есть Redis‑сервер. Мы можем хранить состояния фичей там.
import redis r = redis.Redis(host='localhost', port=6379, db=0) def is_feature_enabled(feature_name): return r.get(feature_name) == b'true'
if is_feature_enabled('FEATURE_NEW_COOL_STUFF'): def new_cool_feature(): print("Новая крутая фича активирована!") else: def new_cool_feature(): print("Старая добрая функциональность.")
Теперь можно переключать фичу, просто меняя значение в Redis, без перезагрузки приложения.
Безопасность превыше всего
Конечно, нельзя забывать о безопасности.
-
Не храните секреты в переменных окружения без защиты. Используйте защищенные переменные GitLab.
-
Валидируйте данные из внешних источников. Никогда не доверяйте данным из Redis или других хранилищ без проверки.
-
Логируйте изменения фичей. Так вы сможете отследить, кто и когда включил или отключил фичу.
Помимо этого
GitLab предоставляет встроенную поддержку Feature Flags, но она доступна в премиум‑версиях. Если вы счастливчик с такой лицензией, вот как можно это использовать.
Переходим в Operations > Feature Flags и создаем новый флаг:
-
Name:
new_cool_feature
-
Description: «Активирует новую фичу»
-
Strategy: All users
GitLab использует LaunchDarkly для управления фичами. Нужно установить соответствующий SDK.
pip install launchdarkly-server-sdk
Используем в коде:
import ldclient from ldclient.config import Config ldclient.set_config(Config("YOUR_SDK_KEY")) client = ldclient.get() if client.variation("new_cool_feature", {"key": "user@example.com"}, False): def new_cool_feature(): print("Новая крутая фича активирована через Feature Flag!") else: def new_cool_feature(): print("Старая функциональность через Feature Flag.")
Не забываем заменить "YOUR_SDK_KEY"
на реальный SDK ключ из LaunchDarkly.
Заключение
Feature Toggles — мощный инструмент, но, как и со всем мощным, с ним нужно обращаться осторожно. Не злоупотребляйте фичами: каждая новая фича добавляет сложность в ваш код. Регулярно проводите «генеральную уборку» — удаляйте ненужные переключатели, чтобы не превратить кодовую базу в спагетти‑код. И, конечно же, документируйте свои фичи. Ваши коллеги (и вы сами через пару месяцев) скажут вам спасибо. Или, по крайней мере, не будут на вас сердиться.
Если у вас есть свой опыт использования Feature Toggles в GitLab CI/CD, поделитесь им в комментариях!
А 16 декабря пройдет открытый урок «Настройка Gitlab runner так, чтобы не пожалеть». Записаться на занятие можно на странице курса «CI/CD на основе GitLab».
ссылка на оригинал статьи https://habr.com/ru/articles/861838/
Добавить комментарий