9 min leitura • Guide 816 of 877
Estratégias de Progressive Delivery
Deploy com confiança. O GitScrum ajuda times a rastrear releases de progressive delivery, garantindo que features cheguem aos usuários com segurança e incrementalmente.
Visão Geral de Progressive Delivery
Estratégias de Deployment
COMPARAÇÃO DE ESTRATÉGIAS DE DEPLOYMENT:
┌─────────────────────────────────────────────────────────────┐
│ │
│ BIG BANG DEPLOYMENT (Arriscado): │
│ ─────────────────────────────── │
│ ┌─────────────────────────────────────────────────────────┐│
│ │ Versão Antiga ────────────→ Versão Nova ││
│ │ 100% usuários 100% usuários ││
│ │ ││
│ │ Tudo de uma vez, tudo ou nada ││
│ │ Risco: Se quebrar, todos afetados ││
│ └─────────────────────────────────────────────────────────┘│
│ │
│ ─────────────────────────────────────────────────────────── │
│ │
│ BLUE-GREEN DEPLOYMENT: │
│ ────────────────────── │
│ ┌─────────────────────────────────────────────────────────┐│
│ │ BLUE (Antigo) ◄── Tráfego ──► GREEN (Novo) ││
│ │ v1.0 switch v1.1 ││
│ │ ││
│ │ Dois ambientes idênticos ││
│ │ Troca de tráfego instantânea ││
│ │ Rollback fácil (switch de volta) ││
│ └─────────────────────────────────────────────────────────┘│
│ │
│ ─────────────────────────────────────────────────────────── │
│ │
│ CANARY DEPLOYMENT: │
│ ────────────────── │
│ ┌─────────────────────────────────────────────────────────┐│
│ │ ││
│ │ Tráfego: ──┬──────────────────────────→ Antigo (95%) ││
│ │ └────────────────────────→ Novo (5%) ││
│ │ "Canary" ││
│ │ ││
│ │ Pequena porcentagem recebe versão nova ││
│ │ Aumentar gradualmente se saudável ││
│ │ Detectar problemas cedo ││
│ └─────────────────────────────────────────────────────────┘│
│ │
│ ─────────────────────────────────────────────────────────── │
│ │
│ FEATURE FLAGS: │
│ ────────────── │
│ ┌─────────────────────────────────────────────────────────┐│
│ │ ││
│ │ Código deployed para todos usuários ││
│ │ Feature habilitada para subconjunto ││
│ │ ││
│ │ if (featureFlag.enabled("new-checkout")) { ││
│ │ showNewCheckout(); ││
│ │ } else { ││
│ │ showOldCheckout(); ││
│ │ } ││
│ │ ││
│ │ Toggle sem deployment ││
│ │ Target usuários/grupos específicos ││
│ └─────────────────────────────────────────────────────────┘│
└─────────────────────────────────────────────────────────────┘
Canary Releases
Rollout Gradual
PROCESSO DE ROLLOUT CANARY:
┌─────────────────────────────────────────────────────────────┐
│ │
│ ESTÁGIOS DE ROLLOUT: │
│ ──────────────────── │
│ │
│ ESTÁGIO 1: Canary (1-5%) │
│ ┌─────────────────────────────────────────────────────────┐│
│ │ █ (5%) ││
│ │ ████████████████████████████████████████████████(95%) ││
│ │ ││
│ │ Duração: 15-30 minutos ││
│ │ Observar: Taxas de erro, latência ││
│ │ Critério: Erros <1%, latência <200ms ││
│ └─────────────────────────────────────────────────────────┘│
│ │
│ ESTÁGIO 2: Early Adopters (10-25%) │
│ ┌─────────────────────────────────────────────────────────┐│
│ │ █████████████ (25%) ││
│ │ ██████████████████████████████████████████ (75%) ││
│ │ ││
│ │ Duração: 1-2 horas ││
│ │ Observar: Métricas de negócio, comportamento usuário ││
│ │ Critério: Conversão estável, sem reclamações ││
│ └─────────────────────────────────────────────────────────┘│
│ │
│ ESTÁGIO 3: Maioria (50%) │
│ ┌─────────────────────────────────────────────────────────┐│
│ │ █████████████████████████ (50%) ││
│ │ █████████████████████████ (50%) ││
│ │ ││
│ │ Duração: 2-4 horas ││
│ │ Observar: Todas métricas estáveis ││
│ │ Critério: Sem degradação ││
│ └─────────────────────────────────────────────────────────┘│
│ │
│ ESTÁGIO 4: Completo (100%) │
│ ┌─────────────────────────────────────────────────────────┐│
│ │ ██████████████████████████████████████████████(100%) ││
│ │ ││
│ │ Rollout completo ││
│ │ Continuar monitorando ││
│ │ Manter rollback pronto ││
│ └─────────────────────────────────────────────────────────┘│
│ │
│ ─────────────────────────────────────────────────────────── │
│ │
│ CANARY AUTOMATIZADO: │
│ ──────────────────── │
│ • Progressão automática baseada em métricas │
│ • Rollback automático em breach de threshold │
│ • Gates de aprovação humana opcionais │
└─────────────────────────────────────────────────────────────┘
Blue-Green Deployments
Troca de Ambiente
PROCESSO BLUE-GREEN:
┌─────────────────────────────────────────────────────────────┐
│ │
│ PASSO 1: ESTADO INICIAL │
│ ──────────────────────── │
│ ┌─────────────────────────────────────────────────────────┐│
│ │ ││
│ │ LOAD BALANCER ────────────→ BLUE (v1.0) ◄─ ATIVO ││
│ │ ││
│ │ GREEN (v1.0) ◄─ IDLE ││
│ │ ││
│ └─────────────────────────────────────────────────────────┘│
│ │
│ PASSO 2: DEPLOY NO IDLE │
│ ──────────────────────── │
│ ┌─────────────────────────────────────────────────────────┐│
│ │ ││
│ │ LOAD BALANCER ────────────→ BLUE (v1.0) ◄─ ATIVO ││
│ │ ││
│ │ GREEN (v1.1) ◄─ DEPLOYING ││
│ │ ││
│ │ • Deploy versão nova no GREEN ││
│ │ • Rodar smoke tests ││
│ │ • Sem tráfego de usuário ainda ││
│ └─────────────────────────────────────────────────────────┘│
│ │
│ PASSO 3: TROCAR TRÁFEGO │
│ ──────────────────────── │
│ ┌─────────────────────────────────────────────────────────┐│
│ │ ││
│ │ LOAD BALANCER ────────────→ GREEN (v1.1) ◄─ ATIVO ││
│ │ ││
│ │ BLUE (v1.0) ◄─ IDLE ││
│ │ ││
│ │ • Switch do load balancer ││
│ │ • Todo tráfego agora para GREEN ││
│ │ • BLUE pronto para rollback ││
│ └─────────────────────────────────────────────────────────┘│
│ │
│ PASSO 4: SE PROBLEMA - ROLLBACK │
│ ─────────────────────────────── │
│ ┌─────────────────────────────────────────────────────────┐│
│ │ ││
│ │ LOAD BALANCER ────────────→ BLUE (v1.0) ◄─ ATIVO ││
│ │ ││
│ │ GREEN (v1.1) ◄─ INVESTIGAR││
│ │ ││
│ │ • Rollback instantâneo: switch de volta para BLUE ││
│ │ • Downtime mínimo ││
│ │ • Investigar GREEN com calma ││
│ └─────────────────────────────────────────────────────────┘│
│ │
│ BENEFÍCIOS: │
│ • Rollback instantâneo │
│ • Testar em ambiente de produção antes do tráfego │
│ • Zero-downtime deployments │
└─────────────────────────────────────────────────────────────┘
Feature Flags
Gestão de Flags
ESTRATÉGIAS DE FEATURE FLAG:
┌─────────────────────────────────────────────────────────────┐
│ │
│ TIPOS DE FLAG: │
│ ────────────── │
│ │
│ RELEASE FLAG: │
│ Controla disponibilidade da feature │
│ • "Mostrar novo checkout" │
│ • Vida curta (remover após rollout completo) │
│ │
│ EXPERIMENT FLAG: │
│ Teste A/B │
│ • "Teste cor do botão checkout" │
│ • Medir impacto em métricas │
│ │
│ OPERATIONAL FLAG: │
│ Controla comportamento do sistema │
│ • "Habilitar cache" │
│ • "Usar novo endpoint API" │
│ │
│ KILL SWITCH: │
│ Desabilitar emergência │
│ • "Desabilitar processamento de pagamento" │
│ • Permanente, para emergências │
│ │
│ ─────────────────────────────────────────────────────────── │
│ │
│ OPÇÕES DE TARGETING: │
│ ┌─────────────────────────────────────────────────────────┐│
│ │ FLAG: new-checkout ││
│ │ ││
│ │ REGRAS DE TARGETING: ││
│ │ ││
│ │ 1. Usuários internos (email @company.com) → ON ││
│ │ 2. Usuários beta (opt-in) → ON ││
│ │ 3. Usuários premium → 50% ON ││
│ │ 4. Todos outros → 10% ON ││
│ │ ││
│ │ FALLBACK: OFF ││
│ │ ││
│ │ MÉTRICAS: checkout_completion_rate ││
│ │ OWNER: @product-team ││
│ │ CRIADO: 15 Jan, 2025 ││
│ │ DATA REVISÃO: 15 Fev, 2025 ││
│ └─────────────────────────────────────────────────────────┘│
│ │
│ CICLO DE VIDA DO FLAG: │
│ ────────────────────── │
│ Criar → Testar → Roll out → Limpar │
│ │
│ ⚠️ Remover flags após rollout completo │
│ Flags antigos = dívida técnica │
└─────────────────────────────────────────────────────────────┘
Estratégias de Rollback
Quando Fazer Rollback
DECISÃO DE ROLLBACK:
┌─────────────────────────────────────────────────────────────┐
│ │
│ PRÉ-DEFINIR CRITÉRIOS: │
│ ────────────────────── │
│ │
│ Definir ANTES do deployment, não durante incidente │
│ │
│ ┌─────────────────────────────────────────────────────────┐│
│ │ RELEASE: v2.4.0 ││
│ │ ││
│ │ GATILHOS DE ROLLBACK: ││
│ │ ││
│ │ ROLLBACK AUTOMÁTICO SE: ││
│ │ • Taxa de erro > 1% (baseline: 0.1%) ││
│ │ • Latência p95 > 500ms (baseline: 200ms) ││
│ │ • Respostas 5xx > 0.5% ││
│ │ ││
│ │ REVISÃO MANUAL SE: ││
│ │ • Conversão cai > 5% ││
│ │ • Padrões de tráfego incomuns ││
│ │ • Spike de reclamações de clientes ││
│ │ ││
│ │ ACEITÁVEL (Sem ação): ││
│ │ • Métricas dentro de 10% do baseline ││
│ │ • Mudanças de comportamento esperadas conhecidas ││
│ └─────────────────────────────────────────────────────────┘│
│ │
│ ─────────────────────────────────────────────────────────── │
│ │
│ PLAYBOOK DE ROLLBACK: │
│ ───────────────────── │
│ │
│ 1. DETECTAR: Métrica excede threshold │
│ 2. ALERTAR: Notificação Pager/Slack │
│ 3. DECIDIR: Verificar não é falso positivo (1-2 min) │
│ 4. EXECUTAR: Rodar rollback (automatizado preferido) │
│ 5. VERIFICAR: Confirmar métricas recuperando │
│ 6. COMUNICAR: Atualizar stakeholders │
│ 7. INVESTIGAR: Root cause (após estável) │
│ │
│ REGRA: Rollback primeiro, investigar depois │
│ Não debugar em produção durante outage │
└─────────────────────────────────────────────────────────────┘
Rastreamento de Releases
Rastreamento de Release
RASTREAMENTO DE RELEASE NO GITSCRUM:
┌─────────────────────────────────────────────────────────────┐
│ │
│ BOARD DE RELEASE: │
│ ┌─────────────────────────────────────────────────────────┐│
│ │ PLANEJADO │ DEPLOYING │ CANARY │ ROLLING │ COMPLETO ││
│ │ │ │ │ OUT │ ││
│ │ ┌─────┐ │ │ ┌─────┐ │ │ ┌─────┐ ││
│ │ │v2.5 │ │ │ │v2.4 │ │ │ │v2.3 │ ││
│ │ │Jan28│ │ │ │ 25% │ │ │ │Pronto│ ││
│ │ └─────┘ │ │ └─────┘ │ │ └─────┘ ││
│ │ │ │ │ │ ││
│ └─────────────────────────────────────────────────────────┘│
│ │
│ ─────────────────────────────────────────────────────────── │
│ │
│ DETALHES DA RELEASE: │
│ ┌─────────────────────────────────────────────────────────┐│
│ │ RELEASE: v2.4.0 ││
│ │ STATUS: Canary (25%) ││
│ │ ││
│ │ PROGRESSO DO ROLLOUT: ││
│ │ ████████████░░░░░░░░░░░░░░░░░░░░░░░░░░░░ 25% ││
│ │ ││
│ │ MÉTRICAS: ││
│ │ • Taxa erro: 0.08% (baseline: 0.1%) ✅ ││
│ │ • Latência p95: 185ms (baseline: 200ms) ✅ ││
│ │ • Conversão: 4.2% (baseline: 4.1%) ✅ ││
│ │ ││
│ │ FEATURES INCLUÍDAS: ││
│ │ • STORY-234: Novo fluxo de checkout ││
│ │ • STORY-245: Lógica de retry de pagamento ││
│ │ • BUG-678: Fix cálculo do carrinho ││
│ │ ││
│ │ TIMELINE: ││
│ │ 10:00 - Deployed para canary (5%) ││
│ │ 10:30 - Métricas saudáveis, aumentado para 25% ││
│ │ 12:00 - Revisão, planejar rollout 50% ││
│ │ ││
│ │ OWNER: @jordan ││
│ │ PRÓXIMO: Aumentar para 50% às 12:00 se saudável ││
│ └─────────────────────────────────────────────────────────┘│
└─────────────────────────────────────────────────────────────┘