7 min leitura • Guide 329 of 877
Estratégias Automação Deployment
Deployments manuais são lentos, propensos erro, e estressantes. Deployments automatizados são repetíveis, rápidos, e entediantes—exatamente o que você quer. Este guia cobre estratégias para construir automação deployment que equipes podem confiar.
Abordagens Deployment
| Estratégia | Nível Risco | Velocidade Rollback |
|---|---|---|
| Blue-green | Baixo | Instantâneo |
| Canary | Baixo | Rápido |
| Rolling | Médio | Médio |
| All-at-once | Alto | Lento |
Pipeline CI/CD
Automação End-to-End
ESTRUTURA PIPELINE CI/CD
════════════════════════
ESTÁGIOS:
─────────────────────────────────────
┌─────────────────────────────────────────────────────────────┐
│ PIPELINE CI/CD │
├─────────────────────────────────────────────────────────────┤
│ Build Test Deploy Deploy Deploy │
│ ───── ──── ────── ────── ────── │
│ Staging Canary Prod │
│ ┌─────┐ ┌─────┐ ┌─────┐ ┌─────┐ ┌─────┐ │
│ │Build│───▶│Tests│───▶│Stage│──[OK]─▶│Canary│──▶│ Prod │ │
│ └─────┘ └─────┘ └─────┘ └─────┘ └─────┘ │
│ │ │ │ │
│ [Auto] [Auto] [Manual] │
│ ou [Auto] │
└─────────────────────────────────────────────────────────────┘
ESTÁGIO BUILD:
─────────────────────────────────────
├── Compile/transpile código
├── Instale dependências
├── Gere artefatos
├── Crie imagem Docker
├── Armazene em registry
└── Versionado, reprodutível
ESTÁGIO TEST:
─────────────────────────────────────
├── Testes unitários
├── Testes integração
├── Scan segurança
├── Checks lint e estilo
├── Verificação build
└── Gates qualidade
DEPLOY STAGING:
─────────────────────────────────────
├── Automático em merge main
├── Ambiente full production-like
├── Execute testes smoke
├── Teste manual possível
└── Gate antes produção
DEPLOY PRODUÇÃO:
─────────────────────────────────────
├── Aprovação manual (opcional)
├── Canary primeiro (porcentagem)
├── Monitore por erros
├── Rollout full se saudável
├── Auto-rollback em falha
└── Zero downtime
Deployment Blue-Green
Capacidade Rollback Instantâneo
DEPLOYMENT BLUE-GREEN
═════════════════════
CONCEITO:
─────────────────────────────────────
Dois ambientes idênticos:
├── Blue: Produção atual
├── Green: Nova versão
├── Só um ativo por vez
├── Switch é instantâneo
└── Rollback = switch back
FLUXO:
─────────────────────────────────────
1. Blue está live (versão atual)
2. Deploy nova versão para Green
3. Teste Green completamente
4. Mude tráfego para Green
5. Green está agora live
6. Blue torna-se staging/backup
7. Se problemas: switch back para Blue
Antes switch:
┌─────────────┐ ┌─────────────┐
│ BLUE │ │ GREEN │
│ v1.4.0 │ │ v1.5.0 │
│ (LIVE) │ │ (testing) │
└──────┬──────┘ └─────────────┘
│
──────▶│ Tráfego
Após switch:
┌─────────────┐ ┌─────────────┐
│ BLUE │ │ GREEN │
│ v1.4.0 │ │ v1.5.0 │
│ (backup) │ │ (LIVE) │
└─────────────┘ └──────┬──────┘
│
──────▶│ Tráfego
BENEFÍCIOS:
─────────────────────────────────────
├── Rollback instantâneo (segundos)
├── Zero downtime
├── Teste completo antes go-live
├── Separação clara
└── Confiança em deployments
CONSIDERATIONS:
─────────────────────────────────────
├── Precisa 2x infraestrutura (temp)
├── Compatibilidade database
├── Tratamento sessão
├── Aquecimento cache
└── Vale complexidade
Releases Canary
Rollout Gradual
DEPLOYMENT CANARY
═════════════════
CONCEITO:
─────────────────────────────────────
Shift tráfego gradual:
├── Deploy nova versão
├── Envie pequeno % tráfego
├── Monitore por issues
├── Aumente % se saudável
├── Rollout full ou rollback
└── Risco controlado
FASES:
─────────────────────────────────────
Fase 1: 1% tráfego (canary)
├── Nova versão recebe 1%
├── Monitore erros, latência
├── Compare com baseline
├── 15-30 minutos
└── Detecção rápida
Fase 2: 10% tráfego
├── Aumente se Fase 1 boa
├── Mais tráfego valida
├── Monitore mesmas métricas
├── 30 minutos
└── Construindo confiança
Fase 3: 50% tráfego
├── Rollout significativo
├── Observe cuidadosamente
├── Pronto para rollback
└── Aproximando full
Fase 4: 100% tráfego
├── Rollout completo
├── Monitoramento continua
├── Versão antiga aposentada
└── Deployment completo
AUTOMAÇÃO:
─────────────────────────────────────
Canary automatizado:
stages:
- deploy-canary:
weight: 1%
duration: 15m
- analyze-canary:
check: error_rate < 0.1%
check: latency_p99 < 200ms
on_fail: rollback
- expand-rollout:
weights: [10%, 50%, 100%]
duration_each: 30m
on_fail: rollback
Estratégias Rollback
Recuperação Rápida
ESTRATÉGIAS ROLLBACK
═════════════════════
ROLLBACK AUTOMÁTICO:
─────────────────────────────────────
Trigger rollback em:
├── Taxa erro > threshold
├── Spike latência
├── Falhas health check
├── Issues memória/CPU
├── Falhas teste smoke
└── Sem intervenção manual necessária
Exemplo config:
rollback:
triggers:
- condition: error_rate > 1%
duration: 5m
- condition: p99_latency > 500ms
duration: 10m
- condition: health_check == failing
count: 3
action: revert_to_previous
ROLLBACK INSTANTÂNEO (Blue-Green):
─────────────────────────────────────
├── Switch tráfego
├── Segundos para recuperar
├── Versão anterior ainda rodando
├── Sem redeploy necessário
└── Melhor experiência rollback
REVERT DEPLOY (Redeploy):
─────────────────────────────────────
├── Deploy versão anterior
├── Minutos para recuperar
├── Precisa tempo deployment
├── Funciona com qualquer estratégia
└── Abordagem comum
ROLLBACK FEATURE FLAG:
─────────────────────────────────────
├── Desabilite feature flag
├── Efeito instantâneo
├── Sem deployment necessário
├── Controle granular
├── Melhor para issues feature
└── Separado de rollback deploy
Migrações Database
Mudanças Schema Seguras
ESTRATÉGIA MIGRAÇÃO DATABASE
════════════════════════════
PRINCÍPIOS:
─────────────────────────────────────
├── Sempre backward compatible
├── Separado de deploy app
├── Script rollback pronto
├── Teste em staging primeiro
├── Monitore durante migração
└── Nunca quebre app rodando
PADRÃO EXPAND-CONTRACT:
─────────────────────────────────────
Adicionando coluna:
1. Expand: Adicione nova coluna (nullable)
2. Deploy: App escreve para ambos
3. Migrate: Preencha dados velhos
4. Contract: Torne obrigatório, remova velho
Exemplo:
Fase 1 (expand):
ALTER TABLE users ADD COLUMN email_new VARCHAR;
Fase 2 (deploy):
App escreve para ambos email e email_new
Fase 3 (migrate):
UPDATE users SET email_new = email WHERE email_new IS NULL;
Fase 4 (contract):
ALTER TABLE users DROP COLUMN email;
ALTER TABLE users RENAME email_new TO email;
TIMING:
─────────────────────────────────────
1. Execute migração (antes deploy)
2. Deploy app (usa novo + velho)
3. Verifique sucesso
4. Execute migração cleanup (depois)
Nunca execute migrações breaking
no mesmo deploy que mudanças código.
Notificações Deployment
Consciência Equipe
NOTIFICAÇÕES DEPLOYMENT
═══════════════════════
NOTIFIQUE EM:
─────────────────────────────────────
├── Deployment iniciado
├── Deployment sucedido
├── Deployment falhou
├── Rollback triggered
├── Mudanças status canary
└── Mantenha equipe informada
CANAIS:
─────────────────────────────────────
├── Canal Slack #deployments
├── Email para falhas
├── PagerDuty para falhas críticas
├── Status dashboard
└── Múltiplos canais para redundância
BOA NOTIFICAÇÃO:
─────────────────────────────────────
✅ Deploy iniciado: app v1.5.0 → staging
por @sarah via GitHub Actions
[View pipeline] [View PR]
✅ Deploy completo: app v1.5.0 → staging
Duração: 3m 24s
Todos health checks passaram
[View logs]
❌ Deploy falhou: app v1.5.0 → produção
Erro: Timeout health check
Auto-rollback iniciado
[View logs] [View incident]
Deployment GitScrum
Integração
FEATURES DEPLOYMENT GITSCRUM
════════════════════════════
STATUS TAREFA EM DEPLOY:
─────────────────────────────────────
├── Tarefa deployed → update status automático
├── Rastreamento ambiente por tarefa
├── Label "Deployed to staging"
├── Indicador "In production"
└── Visibilidade do que está onde
RASTREAMENTO RELEASE:
─────────────────────────────────────
├── Release contém tarefas
├── Status deployment release
├── O que foi enviado com este release
├── Geração changelog
├── Imagem completa release
└── Comunicação stakeholder
DASHBOARD DEPLOYMENT:
─────────────────────────────────────
├── Deployments recentes
├── O que está em cada ambiente
├── Itens pendentes para release
├── Métricas frequência deployment
└── Visibilidade equipe
Melhores Práticas
Para Automação Deployment
- Automatize tudo — Repetibilidade e velocidade
- Use rollout staged — Canary ou blue-green
- Auto-rollback — Recuperação rápida em falha
- Separe migrações DB — Nunca mesmo deploy
- Monitore deployments — Saiba quando coisas quebram
Anti-Padrões
ERROS AUTOMAÇÃO DEPLOYMENT:
✗ Deployments manuais
✗ All-at-once para produção
✗ Sem plano rollback
✗ Migração DB no mesmo deploy
✗ Sem monitoramento durante deploy
✗ Deploy sexta tarde
✗ Sem ambiente staging
✗ Sem notificações deployment