CI/CD — Integração e Entrega Contínua

Pipelines de integração contínua, testes automatizados e estratégias de implantação: blue-green, canary e rolling updates.

O que é CI/CD?

CI/CD (Continuous Integration / Continuous Delivery ou Deployment) é um conjunto de práticas que automatizam o processo de levar o código do repositório até a produção.

  • CI (Integração Contínua): cada mudança de código é integrada com frequência, compilada e testada automaticamente
  • CD (Entrega Contínua): o código que passa pela CI está sempre pronto para ser implantado em produção
  • CD (Implantação Contínua): o código é implantado automaticamente em produção sem intervenção manual

Pipeline de CI/CD

Um pipeline é uma sequência de etapas automatizadas pelas quais o código passa desde o commit até a produção.

Etapas típicas

Commit → Build → Test → Análisis → Artefacto → Deploy Staging → Deploy Producción
  1. Build: compilar o código, gerar artefatos
  2. Testes unitários: executar testes rápidos que validam a lógica
  3. Testes de integração: verificar se os componentes funcionam em conjunto
  4. Análise estática: linting, type checking, análise de segurança
  5. Construção do artefato: criar imagem Docker, pacote, etc.
  6. Deploy em staging: implantar automaticamente para testes finais
  7. Deploy em produção: implantar com a estratégia escolhida

Exemplo com GitHub Actions

name: CI/CD Pipeline
on:
  push:
    branches: [main]
  pull_request:
    branches: [main]

jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-node@v4
        with:
          node-version: 20
      - run: npm ci
      - run: npm run lint
      - run: npm run test
      - run: npm run build

  deploy-staging:
    needs: test
    if: github.ref == 'refs/heads/main'
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: Build Docker image
        run: docker build -t my-app:${{ github.sha }} .
      - name: Push to registry
        run: docker push my-app:${{ github.sha }}
      - name: Deploy to staging
        run: kubectl set image deployment/my-app my-app=my-app:${{ github.sha }} -n staging

Testes automatizados na CI

Os testes são a espinha dorsal da CI. Sem testes confiáveis, a automação não faz sentido.

Pirâmide de testes na CI

  • Testes unitários (muitos, rápidos): validam funções e módulos individuais
  • Testes de integração (moderados): validam a comunicação entre componentes
  • Testes end-to-end (poucos, lentos): validam fluxos completos do usuário

Boas práticas

  • Os testes devem ser determinísticos: o mesmo código sempre produz o mesmo resultado
  • Os testes devem ser rápidos: um pipeline lento desestimula a integração frequente
  • Os testes devem ser independentes: não depender da ordem de execução nem de estado compartilhado
  • Usar paralelização para reduzir o tempo total do pipeline

Estratégias de implantação

Rolling update

A estratégia padrão no Kubernetes. Substitui gradualmente as instâncias antigas pelas novas.

  • Vantagem: não requer infraestrutura adicional
  • Desvantagem: durante o update, duas versões coexistem
  • Rollback: automático se os health checks falharem
spec:
  strategy:
    type: RollingUpdate
    rollingUpdate:
      maxSurge: 1
      maxUnavailable: 0

Blue-Green deployment

Mantém dois ambientes idênticos: Blue (atual) e Green (novo). O tráfego é redirecionado de Blue para Green quando Green está pronto.

  • Vantagem: rollback instantâneo (voltar para Blue)
  • Desvantagem: requer o dobro de infraestrutura durante a implantação
  • Ideal para: mudanças grandes ou migrações de banco de dados

Canary deployment

Implanta a nova versão para uma pequena porcentagem de usuários primeiro. Se tudo correr bem, aumenta gradualmente até 100%.

  • Vantagem: risco mínimo, detecção precoce de problemas
  • Desvantagem: mais complexo de implementar e monitorar
  • Ideal para: mudanças com risco ou features experimentais
Fase 1: 5% del tráfico → nueva versión
Fase 2: 25% del tráfico → nueva versión
Fase 3: 50% del tráfico → nueva versión
Fase 4: 100% del tráfico → nueva versión

Feature flags

Não é uma estratégia de implantação em si, mas complementa as anteriores. Permite ativar ou desativar features sem reimplantar.

  • O código novo é implantado, mas fica desativado por padrão
  • É ativado gradualmente para usuários específicos
  • Se houver problemas, é desativado sem rollback

Boas práticas de CI/CD

  1. Fazer commits pequenos e frequentes: facilita a detecção de erros
  2. O pipeline deve ser rápido: idealmente menos de 10 minutos para a CI
  3. Nunca pular o pipeline: toda mudança passa pela CI, sem exceções
  4. Artefatos imutáveis: o mesmo artefato é promovido entre ambientes
  5. Monitorar as implantações: alertas automáticos se algo falhar após o deploy
  6. Automatizar rollbacks: se as métricas se degradarem, reverter automaticamente

Resumo

CI/CD automatiza o caminho do código até a produção. A integração contínua garante que cada mudança seja validada automaticamente, enquanto as estratégias de implantação (rolling, blue-green, canary) permitem levar mudanças à produção com confiança e risco mínimo.