CI/CD é a prática de automatizar o pipeline de entrega de software: de um commit no repositório até a aplicação em produção.
CI: Integração Contínua
A cada push/PR, o pipeline roda automaticamente:
- Build: compila ou valida o código
- Lint: verifica estilo e padrões
- Testes: unitários, integração, e2e
- Análise de segurança: SAST, dependências vulneráveis
O objetivo é detectar problemas cedo, antes de chegar ao ambiente de produção.
CD: Deploy Contínuo / Entrega Contínua
| Conceito | Significado |
|---|---|
| Continuous Delivery | artefato sempre pronto para deploy, mas o disparo é manual |
| Continuous Deployment | deploy automático após CI passar, sem intervenção humana |
Ferramentas
| Ferramenta | Onde roda | Destaque |
|---|---|---|
| GitHub Actions | GitHub | integrado ao repositório, marketplace amplo |
| GitLab CI | GitLab | pipelines nativos com stages bem definidos |
| Jenkins | self-hosted | altamente customizável, mais complexo |
| CircleCI | cloud/self-hosted | rápido, bom para paralelismo |
| ArgoCD | Kubernetes | GitOps: sincroniza estado do cluster com o repo |
Estrutura de um pipeline (GitHub Actions)
# .github/workflows/ci.yml
name: CI
on:
push:
branches: [main]
pull_request:
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: "3.12"
- run: pip install -r requirements.txt
- run: pytest --cov=src
deploy:
needs: test
if: github.ref == 'refs/heads/main'
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- run: echo "Deploy para produção..."Promoção de ambientes
feature-branch → PR → CI (testes)
↓ aprovado
merge → main → CD → staging → aprovação manual → prod
Boas práticas
- Fail fast: coloque testes rápidos no início do pipeline
- Cache de dependências: evita reinstalar a cada run
- Secrets como variáveis de ambiente: nunca hardcodar credenciais
- Artifacts: preserve build outputs entre stages
- Ambientes isolados: staging espelha prod em config, não em dados
Ver também: ArgoCD | Docker | Kubernetes