6 min leitura • Guide 425 of 877
Melhores Práticas de Pipeline CI/CD
Pipelines CI/CD automatizam o caminho do código para produção. Bons pipelines são rápidos, confiáveis e capturam problemas cedo. Maus pipelines são lentos, instáveis e criam medo de deployment. Este guia cobre construir pipelines efetivos.
Estágios do Pipeline
| Estágio | Propósito | Velocidade |
|---|---|---|
| Build | Compilar código | < 2 min |
| Test | Verificar correção | < 5 min |
| Security | Encontrar vulnerabilidades | < 3 min |
| Deploy | Enviar para ambiente | < 5 min |
Design do Pipeline
Estágios Essenciais
DESIGN DE PIPELINE CI/CD
════════════════════════
PIPELINE BÁSICO:
─────────────────────────────────────
build → test → deploy
Começo simples
PIPELINE ABRANGENTE:
─────────────────────────────────────
┌─────────────────────────────────────┐
│ CI │
├─────────────────────────────────────┤
│ checkout → build → lint → test │
│ │ │ │
│ └── security scan ───┘ │
└─────────────┬───────────────────────┘
│
▼ artefato
┌─────────────────────────────────────┐
│ CD │
├─────────────────────────────────────┤
│ deploy staging → smoke → approve │
│ │ │ │
│ ▼ ▼ │
│ testes integração deploy prod │
│ │ │
│ testes smoke │
└─────────────────────────────────────┘
DETALHES DO ESTÁGIO:
─────────────────────────────────────
Build:
├── Compilar/transpilar código
├── Instalar dependências
├── Criar artefato de build
└── Rápido, paralelizável
Lint:
├── Verificações de estilo de código
├── Análise estática
├── Verificação de formato
└── Capturar problemas cedo
Test:
├── Testes unitários
├── Testes de integração
├── Testes E2E (se rápidos)
└── Confiança na correção
Security:
├── Scan de dependências
├── SAST (análise estática)
├── Detecção de segredos
└── Gates de segurança
Otimização do Pipeline
Tornando Rápido
OTIMIZAÇÃO DE PIPELINE
══════════════════════
PARALELIZAÇÃO:
─────────────────────────────────────
Execute jobs independentes em paralelo:
┌── lint
build ──┼── testes unitários ──► deploy
└── scan de segurança
Em vez de:
build → lint → testes → segurança → deploy
CACHE:
─────────────────────────────────────
Cache:
├── Dependências (node_modules, etc.)
├── Artefatos de build
├── Camadas Docker
├── Fixtures de teste
├── Economias enormes de tempo
└── Cache agressivamente
FEEDBACK RÁPIDO:
─────────────────────────────────────
Ordene por velocidade e importância:
├── Lint primeiro (rápido, captura problemas comuns)
├── Testes unitários próximos (rápidos, alto valor)
├── Testes de integração (mais lentos)
├── Testes E2E (mais lentos)
├── Falhar rápido
└── Loop de feedback rápido
PIPELINES DIVIDIDOS:
─────────────────────────────────────
Pipeline PR (rápido):
├── Build
├── Lint
├── Testes unitários
├── Segurança básica
└── Feedback rápido
Branch principal (abrangente):
├── Suite completa de testes
├── Segurança completa
├── Deploy para staging
├── Testes de integração
└── Verificação completa
Confiabilidade
Pipelines Estáveis
CONFIABILIDADE DE PIPELINE
══════════════════════════
TESTES INSTÁVEIS:
─────────────────────────────────────
Problema:
├── Testes passam às vezes, falham outras
├── Erodi confiança no pipeline
├── Pessoas ignoram falhas
├── Pipeline se torna inútil
└── Problema sério
Conserto:
├── Trate como bug de alta prioridade
├── Quarentena enquanto conserta
├── Não apenas retry
├── Rastreie taxa instável
├── Análise de causa raiz
└── Tolerância zero
CONSISTÊNCIA DE AMBIENTE:
─────────────────────────────────────
├── Docker para builds consistentes
├── Versões de dependências fixadas
├── Ambientes reprodutíveis
├── Mesmo tooling em todos lugares
└── Sem "funciona na minha máquina"
TRATAMENTO DE FALHA:
─────────────────────────────────────
├── Mensagens de erro claras
├── Artefatos em falha
├── Fácil reproduzir localmente
├── Capacidade de rollback
├── Degradação graciosa
└── Falhas debugáveis
MONITORAMENTO:
─────────────────────────────────────
Rastreie:
├── Tendência de duração do pipeline
├── Taxa de sucesso
├── Taxa de testes instáveis
├── Gargalos de estágio
├── Melhoria orientada por dados
└── Métricas de pipeline
Estratégias de Deployment
Deployments Seguros
ESTRATÉGIAS DE DEPLOYMENT
═════════════════════════
BLUE-GREEN:
─────────────────────────────────────
├── Dois ambientes idênticos
├── Deploy para inativo (green)
├── Trocar tráfego
├── Antigo (blue) é rollback
├── Rollback rápido
└── Zero downtime
CANARY:
─────────────────────────────────────
├── Deploy para pequena % de tráfego
├── Monitorar por problemas
├── Aumentar % gradualmente
├── Roll back se problemas
├── Rollout progressivo
└── Risco controlado
ROLLING:
─────────────────────────────────────
├── Atualizar instâncias uma por uma
├── Sempre algumas saudáveis
├── Transição gradual
├── Natural para k8s/containers
└── Update incremental
FEATURE FLAGS:
─────────────────────────────────────
├── Deploy código desabilitado
├── Habilitar via flag
├── Separar deploy de release
├── Rollback instantâneo
└── Deployment desacoplado
Integração GitScrum
Rastreando Pipeline
GITSCRUM PARA CI/CD
═══════════════════
TAREFAS DE DEPLOYMENT:
─────────────────────────────────────
├── Rastreie trabalho relacionado a deployment
├── Label: infraestrutura
├── Melhorias de pipeline
├── Visível no sprint
└── Trabalho de primeira classe
RASTREAMENTO DE RELEASE:
─────────────────────────────────────
├── Link commits para tarefas
├── O que foi enviado quando
├── Release notes
├── Rastreabilidade
└── Conectado
RESPOSTA A INCIDENTE:
─────────────────────────────────────
├── Falhas de pipeline como tarefas
├── Rastreie tempo de resolução
├── Documentação de post-mortem
├── Ações de melhoria
└── Melhoria contínua
Melhores Práticas
Para Pipelines CI/CD
- Feedback rápido — Menos de 10 min CI
- Confiável — Conserte testes instáveis
- Paralelizado — Execute jobs concorrentemente
- Cacheado — Reutilize trabalho
- Deployment progressivo — Canary/blue-green
Anti-Padrões
ERROS DE PIPELINE:
✗ Pipelines lentos (> 30 min)
✗ Ignorando testes instáveis
✗ Sem cache
✗ Sequencial quando paralelo possível
✗ Passos manuais de deployment
✗ Sem plano de rollback
✗ Deploy direto para prod
✗ Sem monitoramento