Управляем фичами: Feature Toggles в GitLab

от автора

Привет, коллеги! Сегодня мы рассмотрим одну из самых полезных практик, которая спасла мне не один проект — 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/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *