FlipFlag

Интеграция с CI/CD

Автоматическая синхронизация feature flags через CI/CD пайплайны

Команда flipflag sync позволяет автоматически загружать feature flags из файла .flipflag.yml на платформу FlipFlag через CI/CD пайплайны.

Настройка синхронизации

Параметры команды sync

ФлагПеременная окруженияОписаниеОбязательный
--private-key KEYFLIPFLAG_PRIVATE_KEYПриватный ключ API✅ Да
--public-key KEYFLIPFLAG_PUBLIC_KEYПубличный ключ API❌ Нет
--api-url URLFLIPFLAG_API_URLURL 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: main

Jenkins

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 безопасности

On this page