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
- Build: compilar o código, gerar artefatos
- Testes unitários: executar testes rápidos que validam a lógica
- Testes de integração: verificar se os componentes funcionam em conjunto
- Análise estática: linting, type checking, análise de segurança
- Construção do artefato: criar imagem Docker, pacote, etc.
- Deploy em staging: implantar automaticamente para testes finais
- 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
- Fazer commits pequenos e frequentes: facilita a detecção de erros
- O pipeline deve ser rápido: idealmente menos de 10 minutos para a CI
- Nunca pular o pipeline: toda mudança passa pela CI, sem exceções
- Artefatos imutáveis: o mesmo artefato é promovido entre ambientes
- Monitorar as implantações: alertas automáticos se algo falhar após o deploy
- 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.