O que é CI/CD? Integração e entrega contínua
Entenda o que é CI/CD, como pipelines automatizam testes e deploy e por que essa prática permite entregar software com mais frequência, qualidade e segurança.

Neste artigo
Entregar software costumava ser um evento raro e tenso, daqueles que se faziam de madrugada e com o coração na mão. CI/CD virou esse processo de cabeça para baixo, tornando entregas algo frequente, automático e sem drama. Neste artigo você vai entender o que significam essas siglas, como um pipeline funciona por dentro, quais estratégias de deploy existem e por que essa prática se tornou padrão na indústria.
O que significa CI/CD#
CI/CD é a combinação de práticas que automatizam a construção, o teste e a publicação de software. As siglas representam:
- CI — Continuous Integration (Integração Contínua): integrar mudanças de código com frequência, validando-as automaticamente.
- CD — Continuous Delivery (Entrega Contínua) ou Continuous Deployment (Implantação Contínua): levar essas mudanças validadas até a produção de forma automatizada.
A ideia central é simples: quanto menores e mais frequentes forem as entregas, menores são os riscos. Em vez de acumular meses de mudanças em um único deploy assustador, você publica pequenos incrementos o tempo todo (Humble & Farley, 2010).
Integração Contínua na prática#
A Integração Contínua resolve um problema clássico de equipes: o "inferno da integração", quando vários desenvolvedores trabalham isolados por semanas e, ao juntar tudo, descobrem dezenas de conflitos e incompatibilidades.
Com CI, cada pessoa integra seu trabalho ao repositório principal várias vezes ao dia. A cada integração, um servidor automático:
- Baixa a versão mais recente do código.
- Compila/constrói a aplicação.
- Roda a suíte de testes automatizados.
- Avisa imediatamente se algo quebrou.
Esse fluxo depende diretamente de um bom uso de controle de versão. Se você ainda não domina o básico, vale ler O que é Git? Controle de versão para iniciantes, porque é o push para o repositório que normalmente dispara todo o processo.
Trunk-based vs. branches de longa duração#
A forma como a equipe organiza seus branches impacta diretamente a saúde da CI:
- Trunk-based development: todos integram em um único branch principal (a "trunk") com altíssima frequência, usando branches efêmeros que vivem horas, não semanas. É a abordagem que melhor combina com CI, porque mantém a distância entre o trabalho de cada pessoa pequena.
- Branches de longa duração: features ficam isoladas por dias ou semanas. Quanto mais tempo um branch vive longe do principal, mais doloroso é o merge — exatamente o problema que a CI tenta evitar.
A regra de ouro: integre cedo, integre frequentemente. Um branch que diverge por muito tempo acumula risco silenciosamente.
Entrega Contínua vs. Implantação Contínua#
As duas formas de "CD" são parecidas, mas têm uma diferença importante:
- Entrega Contínua (Continuous Delivery): cada mudança aprovada está sempre pronta para ir à produção, mas o passo final é acionado manualmente por uma pessoa.
- Implantação Contínua (Continuous Deployment): o passo final também é automático. Se passou em todos os testes, vai para produção sem intervenção humana.
A Entrega Contínua dá um botão de "publicar agora"; a Implantação Contínua dispensa até o botão. A escolha depende da maturidade do time e do nível de confiança nos testes. Times que estão começando geralmente preferem a Entrega Contínua: o pipeline deixa tudo pronto, mas uma pessoa decide o momento de apertar o botão. Conforme a confiança na suíte de testes cresce, esse passo manual tende a desaparecer.
Anatomia de um pipeline#
O pipeline é a sequência de etapas automatizadas pela qual o código passa, da integração até a produção. Um pipeline típico tem estágios como:
Commit -> Build -> Testes -> Análise -> Empacotamento -> DeployCada estágio só avança se o anterior tiver sucesso. Se os testes falham, o pipeline para e o time é notificado, impedindo que código defeituoso siga adiante. Veja um exemplo simplificado de configuração de pipeline:
stages:
- build
- test
- deploy
build:
stage: build
script:
- npm install
- npm run build
test:
stage: test
script:
- npm test
deploy:
stage: deploy
script:
- ./deploy.sh
only:
- mainNote que o deploy só roda no branch main, garantindo que apenas código revisado e aprovado chegue à produção.
Cada estágio em detalhe#
Vale entender o que costuma acontecer em cada parte:
- Build: instala dependências e compila/empacota a aplicação. Aqui é onde erros de sintaxe e dependências quebradas aparecem primeiro.
- Testes: roda as suítes automatizadas. Costuma ser o estágio mais demorado e o mais valioso.
- Análise estática e segurança: lint, formatação, checagem de tipos e scanners de vulnerabilidades em dependências (SCA) e no código (SAST).
- Empacotamento: gera o artefato final — uma imagem de container, um binário ou um pacote versionado.
- Deploy: publica o artefato no ambiente alvo (staging, depois produção).
Um princípio importante: construa o artefato uma única vez e promova-o pelos ambientes. Reconstruir a cada ambiente abre espaço para divergências sutis — o que você testou em staging pode não ser exatamente o que vai para produção.
Exemplo com GitHub Actions#
Para fixar com outra ferramenta popular, veja um workflow equivalente:
name: ci
on:
push:
branches: [main]
pull_request:
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 testRepare que o workflow roda tanto em push no main quanto em cada pull_request — assim cada proposta de mudança é validada antes do merge.
O papel central dos testes#
Um pipeline só é confiável se os testes forem confiáveis. Eles são a rede de segurança que permite automatizar com tranquilidade — sem testes sólidos, automação só acelera a chegada de bugs à produção.
Por isso, investir em testes é pré-requisito para CI/CD de verdade. Para começar com o pé direito, confira Testes automatizados: o guia definitivo para começar. Uma boa estratégia normalmente combina:
- Testes unitários: rápidos, verificam pequenas unidades de código isoladas.
- Testes de integração: checam se partes diferentes funcionam juntas.
- Testes de ponta a ponta: simulam o uso real da aplicação.
Quanto mais rápido o feedback dos testes, mais ágil fica o pipeline. A "pirâmide de testes" sugere muitos testes unitários (baratos e rápidos), uma camada menor de integração e poucos testes de ponta a ponta (caros e lentos). Inverter essa pirâmide — depender principalmente de testes E2E frágeis — costuma deixar o pipeline lento e instável, com falhas intermitentes (os temidos flaky tests) que minam a confiança do time.
Containers e CI/CD#
A automação de deploy ficou muito mais simples com containers. Quando o pipeline empacota a aplicação em uma imagem, ele garante que o que foi testado é exatamente o que vai rodar em produção — sem surpresas de ambiente. Esse casamento é explicado em O que é Docker? Containers explicados de forma simples.
Em ambientes maiores, o pipeline não apenas constrói a imagem, mas também a entrega a um orquestrador, que cuida de subir as novas versões sem derrubar o serviço. Esse papel é detalhado em O que é Kubernetes? Orquestração de containers, que permite estratégias como atualizações graduais e retorno automático à versão anterior em caso de falha.
Estratégias de deploy#
Levar uma versão nova ao ar sem causar instabilidade é uma arte. As estratégias mais comuns:
- Recreate: derruba a versão antiga e sobe a nova. Simples, mas gera indisponibilidade durante a troca.
- Rolling update: substitui as instâncias aos poucos, mantendo o serviço no ar o tempo todo.
- Blue-green: mantém dois ambientes idênticos; você publica no inativo, testa e então redireciona o tráfego de uma vez. O rollback é instantâneo: basta voltar o tráfego para o ambiente antigo.
- Canary: libera a versão nova para uma fração pequena dos usuários, observa métricas e erros, e só então expande gradualmente.
O rollback rápido é tão importante quanto o deploy. Um dos indicadores de equipes de alta performance é justamente o tempo de recuperação após uma falha — e ele depende de conseguir voltar à versão anterior com poucos cliques.
Versionamento de banco e migrations no pipeline#
Código é fácil de reverter; banco de dados, não. Por isso, mudanças de esquema (migrations) merecem atenção especial no pipeline:
- Migrations versionadas e idempotentes: cada alteração de esquema vive no controle de versão, roda em ordem e pode ser aplicada com segurança.
- Compatibilidade para trás (expand/contract): ao mudar o esquema, primeiro adicione o novo formato sem remover o antigo (expand), faça o deploy do código que lida com ambos e só depois remova o que sobrou (contract). Isso evita que uma versão antiga rodando lado a lado com a nova quebre.
- Migrations no pipeline, não na mão: aplicar manualmente em produção é fonte clássica de erro humano.
A regra é tratar o esquema do banco como parte do artefato versionado, nunca como um passo paralelo improvisado.
Ambientes e promoção de artefatos#
Um pipeline maduro move o mesmo artefato por uma escada de ambientes, ganhando confiança a cada degrau:
PR / branch -> ambiente efêmero (preview)
merge no main -> staging (espelho de produção)
aprovação -> produção- Ambientes efêmeros: alguns times sobem um ambiente temporário por pull request, permitindo revisar a mudança rodando de verdade antes do merge.
- Staging fiel: quanto mais staging se parecer com produção (dados, configuração, escala), mais confiável é o sinal verde.
- Configuração por ambiente, não por build: o artefato é o mesmo; o que muda são variáveis de ambiente e segredos injetados na hora do deploy. Reconstruir por ambiente quebra a garantia de que você está promovendo exatamente o que testou.
Observabilidade: o deploy não termina no green#
Publicar não é o fim — é o começo da verificação em produção. Um pipeline maduro se conecta à observabilidade:
- Health checks confirmam que a nova versão subiu saudável antes de receber tráfego.
- Métricas e logs são monitorados logo após o deploy; um aumento de erros dispara rollback.
- Deploys progressivos (canary) usam essas métricas para decidir automaticamente se expandem ou revertem.
A ideia central é fechar o ciclo: você não apenas entrega, você confirma que a entrega está funcionando — e reage rápido se não estiver.
Code review e CI/CD juntos#
CI/CD não substitui o olhar humano — ele o complementa. O fluxo mais comum integra os dois assim:
- O dev abre um pull request com sua mudança.
- O pipeline roda automaticamente os testes naquele PR.
- Colegas revisam o código enquanto a automação valida a qualidade técnica.
- Aprovado humano + pipeline verde = merge e deploy.
Para que esse passo de revisão flua bem, vale conhecer Code review eficiente: como revisar código sem brigar com o time. A combinação de revisão humana com verificação automática é uma das marcas de equipes de alta performance. A regra prática: a automação cuida do que é mecânico (formatação, testes, tipos) para que os humanos foquem no que só eles fazem bem — avaliar design, clareza e adequação da solução ao problema.
Segredos e segurança no pipeline#
Pipelines manipulam credenciais sensíveis: tokens de deploy, chaves de [API](/seguranca-de-chaves-api), senhas de banco. Tratá-los com descuido é um vetor de ataque sério.
- Nunca coloque segredos no código ou nos arquivos de configuração do pipeline. Use os cofres de segredos da própria ferramenta (secrets do GitHub Actions, variáveis protegidas do GitLab, etc.).
- Limite o escopo das credenciais: um token que só pode publicar em um ambiente é menos perigoso se vazar.
- Audite dependências automaticamente, pois a cadeia de suprimentos (supply chain) é um alvo crescente.
- Restrinja quem pode alterar o pipeline em si — quem controla o build controla o que vai para produção.
Os benefícios comprovados#
CI/CD não é só modismo: há evidência de que essas práticas melhoram tanto a velocidade quanto a estabilidade das entregas. Pesquisas mostram que organizações com forte automação de entrega implantam software com mais frequência, têm prazos menores entre commit e produção e se recuperam mais rápido de incidentes (Forsgren, Humble & Kim, 2018).
Os principais ganhos são:
- Feedback rápido: erros aparecem em minutos, não em semanas.
- Menos risco por entrega: mudanças pequenas e frequentes são mais fáceis de revisar e reverter.
- Mais qualidade: cada mudança passa pela mesma bateria de testes.
- Mais previsibilidade: deploys deixam de ser eventos heroicos e viram rotina.
Os quatro indicadores DORA (frequência de deploy, lead time para mudanças, taxa de falha em mudanças e tempo de restauração) viraram referência da indústria para medir desempenho de entrega — e CI/CD é o alicerce que move todos eles na direção certa.
Cultura, não só ferramentas#
Um erro comum é achar que CI/CD se resume a instalar uma ferramenta. Na verdade, é tanto cultura quanto tecnologia. Para funcionar de verdade, o time precisa:
- Integrar com frequência, em vez de segurar mudanças por dias.
- Manter o pipeline verde: um build quebrado é prioridade máxima.
- Confiar nos testes e melhorá-los continuamente.
- Automatizar tudo o que for repetitivo e propenso a erro humano.
Sem essa disciplina, a melhor ferramenta do mundo não entrega resultado.
Erros comuns ao adotar CI/CD#
- Pipeline lento demais: se o feedback demora 40 minutos, o dev troca de contexto e a CI deixa de ser útil. Paralelize estágios e cacheie dependências.
- Tolerar testes intermitentes: um teste que falha "às vezes" treina o time a ignorar falhas vermelhas — e aí uma falha real passa despercebida.
- Deixar o build quebrado de lado: a trunk com build vermelho bloqueia todo mundo. Consertar deve vir antes de qualquer nova feature.
- Automatizar deploy sem automatizar rollback: publicar rápido sem conseguir voltar rápido é uma armadilha.
- Diferença entre ambientes: se staging não se parece com produção, o pipeline verde mente.
Perguntas frequentes#
Preciso de Implantação Contínua total para ter CI/CD? Não. Você pode (e deve) começar só com CI — integração frequente validada por testes. A parte de CD pode evoluir aos poucos, começando pela Entrega Contínua com um passo manual.
CI/CD serve para times pequenos ou projetos solo? Sim. Mesmo sozinho, ter testes rodando a cada push e deploy automatizado elimina erros bobos e libera tempo mental.
Qual ferramenta devo usar? GitHub Actions, GitLab CI, Jenkins e CircleCI são opções populares. Para a maioria dos projetos hospedados no GitHub ou GitLab, a ferramenta nativa da plataforma é o caminho de menor atrito.
CI/CD funciona sem testes automatizados? Tecnicamente sim, mas você perde a maior parte do valor. Sem testes, o pipeline só automatiza a entrega de código não verificado — o que acelera a chegada de bugs à produção.
Conclusão#
CI/CD transforma a entrega de software de um evento raro e arriscado em um fluxo contínuo, automatizado e confiável. Integrando código com frequência, validando tudo com testes automatizados e empacotando aplicações em containers, as equipes entregam mais rápido e com mais segurança. Mas lembre-se: as ferramentas são só metade da história — a outra metade é a cultura de automação e disciplina. Comece pequeno, automatize seus testes, conecte-os ao seu repositório, adote uma estratégia de deploy com rollback fácil e veja a frequência de entrega da sua equipe decolar.
Referências#
- Jez Humble, David Farley (2010). Continuous Delivery: Reliable Software Releases through Build, Test, and Deployment Automation. Addison-Wesley.
- Nicole Forsgren, Jez Humble, Gene Kim (2018). Accelerate: The Science of Lean Software and DevOps. IT Revolution.
- Paul M. Duvall, Steve Matyas, Andrew Glover (2007). Continuous Integration: Improving Software Quality and Reducing Risk. Addison-Wesley.


