Интеграция с CI/CD
Автоматическая синхронизация feature flags через CI/CD пайплайны
Команда flipflag sync позволяет автоматически загружать feature flags из файла .flipflag.yml на платформу FlipFlag через CI/CD пайплайны.
Настройка синхронизации
Параметры команды sync
| Флаг | Переменная окружения | Описание | Обязательный |
|---|---|---|---|
--private-key KEY | FLIPFLAG_PRIVATE_KEY | Приватный ключ API | ✅ Да |
--public-key KEY | FLIPFLAG_PUBLIC_KEY | Публичный ключ API | ❌ Нет |
--api-url URL | FLIPFLAG_API_URL | URL API сервера | ❌ Нет |
--config PATH | — | Путь к конфигурационному файлу | ❌ Нет |
Коды выхода
0— успешная синхронизация всех флагов1— ошибка аутентификации, сети или частичная ошибка синхронизации
Примеры интеграций
GitLab CI/CD
sync-features:
stage: sync
image: node:20-alpine
only:
- main
script:
- npm install -g @flipflag/cli
- flipflag sync --private-key "$FLIPFLAG_PRIVATE_KEY"GitHub Actions
name: Sync Feature Flags
on:
push:
branches: [main]
jobs:
sync:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Setup Node.js
uses: actions/setup-node@v3
with:
node-version: '20'
- name: Install FlipFlag CLI
run: npm install -g @flipflag/cli
- name: Sync Feature Flags
run: flipflag sync --private-key "${{ secrets.FLIPFLAG_PRIVATE_KEY }}"CircleCI
version: 2.1
jobs:
sync-flags:
docker:
- image: node:20
steps:
- checkout
- run:
name: Install CLI
command: npm install -g @flipflag/cli
- run:
name: Sync Flags
command: flipflag sync --private-key "$FLIPFLAG_PRIVATE_KEY"
workflows:
main:
jobs:
- sync-flags:
filters:
branches:
only: mainJenkins
pipeline {
agent any
environment {
FLIPFLAG_PRIVATE_KEY = credentials('flipflag-private-key')
}
stages {
stage('Sync Feature Flags') {
when {
branch 'main'
}
steps {
sh 'npm install -g @flipflag/cli'
sh 'flipflag sync'
}
}
}
}Azure Pipelines
trigger:
branches:
include:
- main
pool:
vmImage: 'ubuntu-latest'
steps:
- task: NodeTool@0
inputs:
versionSpec: '20.x'
displayName: 'Install Node.js'
- script: npm install -g @flipflag/cli
displayName: 'Install FlipFlag CLI'
- script: flipflag sync
env:
FLIPFLAG_PRIVATE_KEY: $(FLIPFLAG_PRIVATE_KEY)
displayName: 'Sync Feature Flags'Мульти-окружение
Для разных окружений можно использовать отдельные конфигурационные файлы и ключи:
# Development
flipflag sync --config .flipflag.dev.yml --private-key "$DEV_PRIVATE_KEY"
# Staging
flipflag sync --config .flipflag.staging.yml --private-key "$STAGING_PRIVATE_KEY"
# Production
flipflag sync --config .flipflag.prod.yml --private-key "$PROD_PRIVATE_KEY"Безопасность
Рекомендации по работе с ключами
- ❌ Никогда не коммитьте API ключи в репозиторий
- ✅ Используйте переменные окружения или secrets management
- ✅ Храните разные ключи для dev/staging/production
- ✅ Регулярно ротируйте приватные ключи
- ✅ Ограничьте синхронизацию защищёнными ветками (main, master)
Настройка секретов в CI/CD
GitLab CI/CD
Settings → CI/CD → Variables → Add Variable:
- Key:
FLIPFLAG_PRIVATE_KEY - Value: ваш приватный ключ
- Flags: ✅ Masked, ✅ Protected
GitHub Actions
Settings → Secrets and variables → Actions → New repository secret:
- Name:
FLIPFLAG_PRIVATE_KEY - Secret: ваш приватный ключ
CircleCI
Project Settings → Environment Variables → Add Variable:
- Name:
FLIPFLAG_PRIVATE_KEY - Value: ваш приватный ключ
Workflow с автоматической синхронизацией
Вариант 1: Автоматическая синхронизация через CLI
# Начать работу над задачей с отслеживанием времени
flipflag start TASK-123 --type=feature --time
# Работать над задачей...
# Нажать Enter когда закончили
# CLI автоматически обновит .flipflag.yml
# Закоммитить изменения
git add .flipflag.yml
git commit -m "feat: add TASK-123"
git push
# CI/CD автоматически синхронизирует флаги на платформуВариант 2: Ручное редактирование и синхронизация
# Отредактировать .flipflag.yml вручную
vim .flipflag.yml
# Синхронизировать локально для проверки
flipflag sync
# Закоммитить и запушить
git add .flipflag.yml
git commit -m "feat: add new feature flag"
git push
# CI/CD синхронизирует на productionПримеры конфигураций флагов
Активная фича (без даты окончания)
new-dashboard:
contributor: dev@company.com
type: feature
times:
- started: "2025-01-01T00:00:00.000Z"
finished: nullВременная фича (с датой окончания)
holiday-banner:
description: "Новогодний баннер"
contributor: marketing@company.com
type: feature
times:
- started: "2025-12-20T00:00:00.000Z"
finished: "2025-12-26T23:59:59.000Z"Множественные временные окна
seasonal-sale:
description: "Сезонные распродажи"
contributor: marketing@company.com
type: feature
times:
# Чёрная пятница
- started: "2025-11-24T00:00:00.000Z"
finished: "2025-11-30T23:59:59.000Z"
# Рождество
- started: "2025-12-20T00:00:00.000Z"
finished: "2025-12-26T23:59:59.000Z"A/B тест или эксперимент
new-checkout-flow:
description: "Новый флоу оформления заказа"
contributor: product@company.com
type: experiment
times:
- started: "2025-02-01T00:00:00.000Z"
finished: "2025-02-14T23:59:59.000Z"Преимущества синхронизации через CI/CD
- Version Control: флаги хранятся в Git вместе с кодом
- Automation: автоматическая синхронизация через CI/CD
- Collaboration: команда работает с флагами через pull requests
- Audit Trail: полная история изменений флагов в Git
- Multi-Environment: разные конфиги для разных окружений
- Security: встроенные best practices безопасности