CI/CD é uma prática que automatiza build, testes e lançamento de código, para que cada mudança vá do commit à produção em pequenos passos. O nome comprime duas ideias — integração contínua (mesclar e verificar constantemente) e entrega contínua (manter cada mudança pronta para lançar) — mais uma ambiguidade famosa: o segundo “D” também pode significar deploy contínuo, em que nada além de um teste falhando separa um commit da produção.
Principais pontos
| Pergunta | Resposta |
|---|---|
| O que é | Automação que transforma o “dia do release” em um não-evento que acontece o tempo todo |
| CI | Mesclar mudanças pequenas diariamente; cada merge dispara build e testes automaticamente |
| Os dois CDs | A entrega mantém uma aprovação humana antes da produção; o deploy a remove |
| Por que funciona | Mudanças pequenas falham pequeno; feedback rápido pega bugs minutos após serem criados |
| Como se mede | As cinco métricas DORA — e velocidade e estabilidade sobem juntas |
Como é um pipeline na prática
A prática inteira cabe em um arquivo de configuração — este é o artefato que toda página de “CI/CD explicado” descreve e quase nenhuma mostra:
# pipeline.yml — a automação que substitui o "dia do deploy"
on: push to main
jobs:
build:
steps:
- checkout
- run: npm ci && npm run build
test:
needs: build
steps:
- run: npm test # unitários + integração, a cada commit
- run: npm run lint # análise estática
deploy:
needs: test
approval: manual # apague esta linha → deploy contínuo
steps:
- run: npm run deploy
Minutos depois de aquele último passo rodar, todos os clientes já estão chamando a nova versão do backend — que é exatamente o ponto:
// JavaScript / Node.js — Back4app JS SDK
// Seconds after `b4a deploy`, every client is calling the new version
const version = await Parse.Cloud.run('version');
console.log(`API version: ${version}`); // no pipeline YAML, no runners // Flutter / Dart — Back4app Flutter SDK
final function = ParseCloudFunction('version');
final response = await function.execute();
if (response.success) {
print('API version: ${response.result}'); // fresh from the deploy
} // iOS / Swift — Back4app Swift SDK
ParseCloud.callFunction("version") { result in
if case .success(let version) = result {
print("API version: \(version)") // fresh from the deploy
}
} // Android / Kotlin — Back4app Android SDK
ParseCloud.callFunctionInBackground<String>("version", hashMapOf()) { version, e ->
if (e == null) Log.d("API", "version: $version") // fresh from the deploy
} CI vs. entrega contínua vs. deploy contínuo
| Dimensão | Integração contínua | Entrega contínua | Deploy contínuo |
|---|---|---|---|
| Escopo | Merge + build + testes | …mais artefatos sempre prontos para release | …mais release automático |
| Gatilho | Cada commit na mainline | Cada build que passa | Cada build que passa |
| Gate humano | Nenhum (os testes são o gate) | Sim — uma aprovação de release | Nenhum |
| Produção atualiza | Quando alguém lança | Quando alguém clica | Continuamente |
| Melhor para | Todo mundo | Releases regulados, lançamentos com data de marketing | Backends web, SaaS, suítes de teste de alta confiança |
A linhagem merece uma frase: o artigo canônico de Martin Fowler definiu a CI em 2000, o livro de 2010 Continuous Delivery estendeu a ideia ao processo de release, e o DevOps fez do par sua espinha dorsal de automação. Uma aresta afiada de Fowler ainda corta hoje: rodar um servidor de build contra feature branches de vida longa é “semi-integração” — CI de verdade significa a mainline integrando o trabalho de todo mundo pelo menos uma vez por dia.
O pipeline, estágio por estágio
- Fonte. Um commit ou merge dispara tudo. Nunca builds manuais — se não foi disparado, não é CI.
- Build. Compilar, resolver dependências, produzir o artefato (bundle, imagem de contêiner) que todos os estágios seguintes reutilizam — build uma vez, promova em todo lugar.
- Teste. Checagens rápidas primeiro: testes unitários e lint a cada commit; testes de integração contra dependências reais em seguida; end-to-end, performance e varreduras de segurança em execuções posteriores ou agendadas. A velocidade do feedback decide a ordem dos estágios.
- Entrega. O artefato pousa em um ambiente de staging parecido com produção. Na entrega contínua, ele espera ali — pronto para release — por um sim humano.
- Deploy. Produção. Pipelines maduros fazem deploy gradual — uma fatia canário ou um ambiente blue/green paralelo — para que uma mudança ruim seja um rollback contido, não uma indisponibilidade.
Como medir: as métricas DORA
“Somos bons em entrega?” tem uma resposta padrão: as cinco métricas do programa de pesquisa DORA — frequência de deploy, lead time das mudanças, taxa de falha das mudanças, tempo de recuperação de deploys falhos e taxa de retrabalho de deploy. O achado mais citado da pesquisa é que o clássico trade-off velocidade-versus-estabilidade é falso: os times que mais fazem deploy são também os que menos quebram, porque mudanças pequenas e frequentes são individualmente de baixo risco e rápidas de diagnosticar. Se o seu trabalho no pipeline não move uma das cinco, é encanamento, não progresso.
Casos de uso comuns
- Backends web e de API — o lar natural do deploy contínuo pleno: alto volume de mudanças, rollback instantâneo, nenhum passo de instalação.
- Apps mobile — CI mais entrega contínua: o pipeline constrói, testa e prepara cada mudança, enquanto a revisão das lojas torna o empurrão final inerentemente gateado.
- Times crescendo além de um único deployer — o pipeline substitui a única pessoa que “sabe fazer o release” por um processo que qualquer um executa.
- Ambientes regulados — o gate de aprovação vira uma feature: automação total até a linha, uma decisão humana auditável sobre ela.
- Projetos open source — cada pull request construído e testado automaticamente é a CI servindo de porta de entrada do projeto.
Você deveria manter um gate antes da produção? Matriz de decisão
| Escolha deploy contínuo quando… | Mantenha o gate de entrega quando… |
|---|---|
| A suíte de testes tem a confiança da produção | A cobertura de testes ainda está crescendo até merecer essa confiança |
| Rollback é um comando | Rollback é um projeto |
| Usuários esperam atualizações invisíveis e constantes | Releases se alinham a datas de marketing ou de contrato |
| O produto é um backend web ou SaaS | O produto passa pela revisão das lojas de aplicativos |
| Falhas degradam graciosamente atrás de feature flags | Um release ruim tem consequências regulatórias |
O sequenciamento honesto: conquiste o deploy praticando a entrega — automatize tudo até o gate, observe a taxa de falhas e remova o gate quando ele não estiver mais fazendo nada.
Limitações e trade-offs
- O pipeline é código seu. Runners, YAML, caches, secrets — tudo isso precisa de manutenção, e em certos tamanhos de time o pipeline vira um produto próprio, com plantão próprio.
- Testes flaky envenenam tudo. Uma suíte que falha aleatoriamente treina as pessoas a clicar em “retry”, o que converte silenciosamente o deploy contínuo de volta em deploy manual com passos extras.
- Cultura é pré-requisito, não subproduto. Merges pequenos, desenvolvimento na mainline e consertar builds vermelhos imediatamente são hábitos; comprar um pipeline não os instala.
- Velocidade sem observabilidade é aposta. Fazer deploy o tempo todo só é seguro se você enxerga falhas rápido — monitoramento e alertas fazem parte da prática, não são um adendo.
- A última milha varia. Bancos de dados, migrações e serviços stateful resistem ao “é só redeployar”; o pipeline precisa de estratégias (migrações expand-contract, feature flags) que nenhum YAML escreve por você.
CI/CD no Back4app
O Back4app é uma plataforma open-source de Backend as a Service (BaaS) que combina banco de dados gerenciado, APIs REST e GraphQL geradas automaticamente, autenticação, armazenamento de arquivos e funções serverless com Cloud Code. Seu efeito sobre o CI/CD é subtração no lado da entrega: o Cloud Code faz deploy em um comando de CLI ou direto de um repositório Git, e o backend padrão — banco de dados, autenticação, APIs — nunca aparece no seu pipeline, porque não há nada para buildar ou lançar. O que sobra é a metade que você deveria manter: seus testes, rodando a cada commit, na frente de um passo de deploy que agora tem uma linha só.
Perguntas frequentes
O que significa CI/CD?
Continuous Integration e Continuous Delivery — integração contínua e entrega contínua — com uma ambiguidade embutida que todo praticante deveria conhecer: o "CD" também pode significar deploy contínuo (continuous deployment). A entrega mantém uma aprovação humana antes da produção; o deploy a remove. Quando alguém diz "fazemos CI/CD", a pergunta útil é sempre: qual dos dois CDs?
O que é integração contínua?
A prática de mesclar mudanças pequenas em uma mainline compartilhada com frequência — pelo menos diariamente, na definição canônica — com cada merge disparando build e testes automatizados. O ponto é feedback rápido: problemas de integração aparecem minutos depois de serem criados, e não semanas depois, no aperto de um release.
Qual a diferença entre entrega contínua e deploy contínuo?
Um passo de aprovação manual. Na entrega contínua, toda mudança é automaticamente construída, testada e mantida pronta para release, mas um humano decide quando a produção de fato atualiza. No deploy contínuo não há gate: toda mudança que passa pelo pipeline vai ao ar automaticamente, e só um teste falhando a detém.
O que é um pipeline de CI/CD?
O fluxo automatizado que uma mudança percorre do commit à produção: gatilho no código-fonte, build, testes automatizados, entrega a um ambiente de staging e deploy. Cada estágio precisa passar antes de o próximo rodar, então o pipeline age como um gate de qualidade que toda mudança atravessa do mesmo jeito — sem casos especiais, sem heroísmo de deploy.
O que são as métricas DORA?
O jeito padrão da indústria de medir performance de entrega, vindo do programa de pesquisa DORA: frequência de deploy, lead time das mudanças, taxa de falha das mudanças, tempo de recuperação de deploys falhos e — adicionada mais recentemente — taxa de retrabalho de deploy. O achado mais citado da pesquisa é que velocidade e estabilidade não são um trade-off: os melhores times pontuam alto nas duas.
CI/CD é a mesma coisa que DevOps?
Não — DevOps é a cultura mais ampla de unificar desenvolvimento e operações; CI/CD é sua espinha dorsal de automação. Dá para adotar o ferramental de CI/CD sem a cultura (ajuda menos do que se espera) e pregar a cultura sem a automação (muda menos do que se promete). As práticas se reforçam, mas nomeiam coisas diferentes.
Quais testes rodam em um pipeline de CI/CD?
Em camadas, por velocidade: testes unitários e análise estática rodam a cada commit porque são rápidos; testes de integração verificam componentes contra dependências reais; end-to-end, performance e varreduras de segurança rodam em estágios posteriores ou agendados, porque são lentos. A regra de projeto: quanto mais rápido o feedback, mais cedo o estágio.
Times pequenos precisam de CI/CD?
Precisam mais da prática do que do encanamento. Até um time de duas pessoas se beneficia de testes automatizados a cada mudança e de deploys de um comando — isso já é CI/CD em substância. O que times pequenos devem evitar é operar infraestrutura pesada de pipeline; runners hospedados ou plataformas com deploy embutido reduzem a prática a configuração.