6 min leitura • Guide 626 of 877
Melhores Práticas CI/CD
Integração Contínua e Deployment Contínuo transformam como equipes entregam software automatizando builds, testes e deployments. GitScrum integra com pipelines CI/CD para fornecer visibilidade no status de deployment, conectar releases ao progresso do projeto e garantir coordenação da equipe em torno de processos de entrega automatizados.
Fundamentos do Pipeline
Estágios de Pipeline CI/CD
FLUXO PADRÃO DE PIPELINE:
┌─────────────────────────────────────────────────────────────┐
│ │
│ ┌────────┐ ┌────────┐ ┌────────┐ ┌────────┐ ┌──────┐ │
│ │ Commit │→ │ Build │→ │ Test │→ │ Deploy │→ │Verify│ │
│ └────────┘ └────────┘ └────────┘ └────────┘ └──────┘ │
│ │ │ │ │ │ │
│ ↓ ↓ ↓ ↓ ↓ │
│ Push para Compilar Unit + Staging Smoke │
│ branch & Pacotar Integração ou Prod Tests │
│ │
│ INTEGRAÇÃO GITSCRUM: │
│ • Tarefa atualizada para "Building" │
│ • Resultados de teste linkados à tarefa │
│ • Status de deployment rastreado │
│ • Release notes auto-gerados │
└─────────────────────────────────────────────────────────────┘
Configuração de Pipeline
CONFIGURAÇÃO RECOMENDADA DE PIPELINE:
┌─────────────────────────────────────────────────────────────┐
│ ESTÁGIO │ TIMEOUT │ EM FALHA │
├────────────────┼─────────┼──────────────────────────────────┤
│ Lint/Format │ 2 min │ Bloquear merge │
│ Testes Unitários│ 10 min │ Bloquear merge │
│ Build │ 5 min │ Bloquear merge │
│ Integração │ 15 min │ Bloquear merge │
│ Scan Segurança │ 10 min │ Avisar (bloquear em crítico) │
│ Deploy Staging │ 10 min │ Parar pipeline │
│ Testes E2E │ 20 min │ Parar pipeline │
│ Deploy Prod │ 10 min │ Alertar + rollback │
└─────────────────────────────────────────────────────────────┘
Automação de Testes
Pirâmide de Testes
ESTRATÉGIA DE TESTES:
┌─────────────────────────────────────────────────────────────┐
│ │
│ ╱╲ │
│ ╱ ╲ │
│ ╱ E2E╲ Poucos, lentos, caros │
│ ╱──────╲ (5-10% dos testes) │
│ ╱ ╲ │
│ ╱Integração╲ Alguns, velocidade média │
│ ╱────────────╲ (15-25% dos testes) │
│ ╱ ╲ │
│ ╱ Testes Unit ╲ Muitos, rápidos, baratos │
│ ╱──────────────────╲ (65-80% dos testes) │
│ │
│ METAS DE TEMPO DE EXECUÇÃO: │
│ • Testes unitários: < 2 minutos │
│ • Integração: < 10 minutos │
│ • E2E: < 20 minutos │
│ • Pipeline completo: < 30 minutos │
└─────────────────────────────────────────────────────────────┘
Lidando com Testes Instáveis
GERENCIAMENTO DE TESTES INSTÁVEIS:
┌─────────────────────────────────────────────────────────────┐
│ │
│ DETECÇÃO: │
│ • Rastreie taxas de aprovação/falha de testes ao longo do tempo │
│ • Identifique testes que falham intermitentemente │
│ • Defina threshold (ex.: <95% taxa aprovação = instável) │
│ │
│ PROCESSO DE QUARENTENA: │
│ 1. Marque teste como instável no GitScrum │
│ 2. Mova para suite de testes separada │
│ 3. Não bloqueie deployments em testes instáveis │
│ 4. Conserte ou remova dentro de 2 semanas │
│ │
│ PREVENÇÃO: │
│ • Evite testes dependentes de tempo │
│ • Use dados de teste determinísticos │
│ • Isole testes de serviços externos │
│ • Revise design de teste em code reviews │
└─────────────────────────────────────────────────────────────┘
Estratégias de Deployment
Deployment Progressivo
OPÇÕES DE DEPLOYMENT:
┌─────────────────────────────────────────────────────────────┐
│ │
│ DEPLOYMENT ROLLING: │
│ [■■■■■□□□□□] → [■■■■■■■□□□] → [■■■■■■■■■■] │
│ Versão antiga Rollout Versão nova │
│ gradual │
│ │
│ BLUE-GREEN: │
│ Blue (live) ────────────┬───→ Blue (standby) │
│ Green (standby) ────────┴───→ Green (live) │
│ Troca instantânea, rollback fácil │
│ │
│ CANARY: │
│ [■■■■■■■■■□] → [■■■■■■■□□□] → [■■■■■□□□□□] │
│ 1% tráfego 10% tráfego 50% tráfego │
│ Aumento gradual baseado em métricas │
└─────────────────────────────────────────────────────────────┘
Feature Flags
FLUXO DE FEATURE FLAG:
┌─────────────────────────────────────────────────────────────┐
│ │
│ 1. DESENVOLVER: │
│ if (featureFlags.isEnabled('new-checkout')) { │
│ return newCheckout(); │
│ } │
│ return oldCheckout(); │
│ │
│ 2. DEPLOY (flag off): │
│ Código vai para produção, feature escondida │
│ │
│ 3. ROLLOUT: │
│ • Habilitar para usuários internos │
│ • Habilitar para usuários beta (10%) │
│ • Habilitar para todos usuários (100%) │
│ │
│ 4. LIMPEZA: │
│ Remover flag e código antigo após estável │
│ │
│ Rastreie status de flag no GitScrum: │
│ • Link tarefas de feature para flags │
│ • Rastreie progresso de rollout │
│ • Documente tarefas de limpeza │
└─────────────────────────────────────────────────────────────┘
Integração GitScrum
Visibilidade de Status do Pipeline
DASHBOARD CI/CD GITSCRUM:
┌─────────────────────────────────────────────────────────────┐
│ DEPLOYMENTS RECENTES │
├─────────────────────────────────────────────────────────────┤
│ │
│ ✅ v2.4.1 → Produção 2 min atrás [Ver Release] │
│ └── Tarefas: #234, #256, #267 │
│ │
│ ✅ v2.4.1 → Staging 45 min atrás [Ver Release] │
│ └── Todos testes passaram (234/234) │
│ │
│ ❌ v2.4.0 → Staging 2 hrs atrás [Ver Logs] │
│ └── Testes de integração falharam │
│ │
│ SAÚDE DO PIPELINE: │
│ Hoje: 12 builds, 10 passaram (83%) │
│ Tempo médio de build: 8m 32s │
└─────────────────────────────────────────────────────────────┘
Atualizações Automáticas de Tarefa
AUTOMAÇÃO CI/CD → GITSCRUM:
┌─────────────────────────────────────────────────────────────┐
│ EVENTO DE PIPELINE │ AÇÃO GITSCRUM │
├─────────────────────────┼───────────────────────────────────┤
│ PR aberto │ Criar/link tarefa se necessário │
│ Build iniciado │ Atualizar tarefa para "Building" │
│ Testes passaram │ Adicionar label "tests-passing" │
│ Testes falharam │ Adicionar label "tests-failing" │
│ Deployed para staging │ Atualizar tarefa para "In Staging"│
│ Deployed para produção │ Atualizar tarefa para "Released" │
│ Deployment falhou │ Alertar equipe, adicionar blocker │
└─────────────────────────────────────────────────────────────┘