Nesta aula, vamos mergulhar em dois conceitos centrais do DevOps: Continuous Delivery (Entrega Contínua) e Continuous Deployment (Implantação Contínua). Embora frequentemente confundidos, eles representam estágios diferentes da automação do pipeline de software. Compreender essas diferenças é essencial para projetar pipelines que equilibrem velocidade, qualidade e controle.

Vamos explorar o que cada prática significa, como se relacionam com o pipeline de CI/CD, o papel dos gates manuais, e como decidir qual abordagem adotar de acordo com as necessidades do seu projeto e da sua organização.

Continuous Delivery vs Deployment

Continuous Delivery (CD) é uma prática de engenharia de software onde o código é sempre mantido em um estado que pode ser implantado em produção a qualquer momento. O pipeline automatiza a construção, o teste e a preparação do artefato, mas a implantação real em produção é uma decisão manual, geralmente acionada por um clique em um botão. Isso permite que as equipes tenham controle total sobre quando o software é lançado, enquanto garantem que o processo seja rápido e confiável.

Por outro lado, Continuous Deployment leva a automação um passo adiante: toda alteração que passa pelos testes automatizados é implantada automaticamente em produção, sem intervenção manual. O objetivo é eliminar completamente os gargalos humanos, permitindo que novas funcionalidades, correções e melhorias cheguem aos usuários de forma contínua e imediata.

Ambas as práticas exigem uma base sólida de testes automatizados, infraestrutura como código e monitoramento robusto. A principal diferença está no nível de automação e no controle humano sobre o processo de lançamento.

Diferenças

As diferenças fundamentais entre Continuous Delivery e Continuous Deployment podem ser resumidas em alguns pontos-chave:

  • Automação da implantação: Na Continuous Delivery, a implantação em produção é um passo manual (embora automatizável até o último estágio). Na Continuous Deployment, a implantação é totalmente automatizada.
  • Intervenção humana: Continuous Delivery requer uma decisão humana para liberar a versão; Continuous Deployment remove essa necessidade, confiando nos testes automatizados.
  • Risco percebido: Continuous Deployment é geralmente adotado por equipes que possuem alta confiança em seus testes e monitoramento, pois qualquer erro pode ir direto para produção. Continuous Delivery oferece uma camada adicional de segurança, permitindo que um humano aprove o lançamento.
  • Frequência de lançamentos: Continuous Deployment tende a gerar lançamentos muito mais frequentes, às vezes múltiplos por dia, enquanto Continuous Delivery pode ter lançamentos menos frequentes, mas sempre prontos para serem feitos.
  • Complexidade do pipeline: Continuous Deployment exige um pipeline mais robusto, com testes abrangentes, estratégias de deploy progressivo (como canary ou blue-green) e monitoramento automatizado para detectar problemas rapidamente.

Para ilustrar, considere um pipeline típico: após o commit, o código é compilado, testado e empacotado. Em Continuous Delivery, o artefato é então disponibilizado em um ambiente de staging, aguardando aprovação manual para ir para produção. Em Continuous Deployment, o mesmo artefato é automaticamente promovido para produção se todos os testes passarem.

Gates manuais

Gates manuais são pontos de controle no pipeline onde um humano precisa aprovar ou rejeitar a continuação do processo. Na Continuous Delivery, o gate manual mais comum é a aprovação para implantar em produção. Isso pode ser feito através de uma interface do pipeline (como Jenkins, GitLab CI, etc.) ou por meio de um processo de revisão de negócios.

Os gates manuais não se limitam apenas à produção; podem ser usados em outros estágios, como aprovação para implantar em um ambiente de homologação ou para liberar uma versão para um grupo de usuários beta. Eles são úteis quando há requisitos regulatórios, necessidade de validação de negócios ou quando a equipe deseja ter um controle mais rígido sobre o que é lançado.

No entanto, gates manuais introduzem atrasos e podem se tornar gargalos se não forem bem gerenciados. Por isso, é importante que eles sejam claros, com critérios de aprovação bem definidos, e que as pessoas responsáveis estejam disponíveis para agir rapidamente. Em muitas organizações, os gates manuais são usados apenas para produção, enquanto todo o resto é automatizado.

Quando usar cada um

A escolha entre Continuous Delivery e Continuous Deployment depende de vários fatores, incluindo o tipo de aplicação, a maturidade da equipe, os requisitos de negócio e a tolerância ao risco.

Continuous Delivery é uma excelente escolha quando:

  • Você opera em setores regulamentados (saúde, finanças) que exigem aprovação humana antes de cada lançamento.
  • Sua equipe ainda está construindo confiança na suíte de testes e no monitoramento.
  • O negócio prefere lançar em janelas específicas (por exemplo, fora do horário comercial) ou em datas planejadas.
  • Você deseja reduzir o risco de implantar automaticamente algo que possa causar impactos negativos.

Continuous Deployment é mais adequado quando:

  • Você possui uma suíte de testes extremamente abrangente e confiável, incluindo testes de integração, contrato e E2E.
  • Seu monitoramento e alertas são robustos, permitindo detectar problemas em produção quase imediatamente.
  • A cultura da empresa valoriza a entrega rápida e iterativa, e os usuários se beneficiam de atualizações frequentes.
  • Você tem estratégias de deploy seguras, como feature flags, canary releases e rollback automático.

Muitas equipes começam com Continuous Delivery e evoluem para Continuous Deployment à medida que ganham maturidade. É perfeitamente possível usar uma abordagem híbrida, onde alguns serviços são implantados automaticamente e outros exigem aprovação manual.

Boas práticas

Independentemente da abordagem escolhida, algumas boas práticas ajudam a garantir o sucesso:

  • Automatize tudo o que for possível: construção, testes, verificação de qualidade, etc. Quanto menos etapas manuais, menos erros.
  • Use feature flags: permitem que você implante código em produção sem expor funcionalidades incompletas, facilitando o Continuous Deployment.
  • Implemente deploy progressivo: como canary releases ou blue-green, para reduzir o impacto de problemas.
  • Monitore continuamente: métricas de aplicação, logs e alertas devem estar integrados ao pipeline para detectar falhas rapidamente.
  • Documente os gates manuais: se você os usa, defina claramente quem aprova, o que é aprovado e quais são os critérios.

Exercícios

  1. Explique com suas palavras a principal diferença entre Continuous Delivery e Continuous Deployment. Dê um exemplo de cenário para cada.
  2. ✓ Resposta: A principal diferença é que na Continuous Delivery a implantação em produção é uma decisão manual (após testes automáticos), enquanto na Continuous Deployment todo código que passa nos testes é automaticamente implantado. Exemplo de CD: uma equipe de e-commerce que lança novas versões a cada duas semanas após aprovação do gerente. Exemplo de Continuous Deployment: uma startup de SaaS que faz deploy várias vezes ao dia automaticamente após testes passar.
  3. Cite pelo menos três situações em que você escolheria Continuous Delivery em vez de Continuous Deployment. Justifique.
  4. ✓ Resposta: 1) Em setores regulamentados (ex.: bancos) onde é preciso aprovação humana para cada release. 2) Quando a suíte de testes ainda não cobre todos os cenários críticos, exigindo revisão manual. 3) Quando o negócio prefere lançar em datas específicas (ex.: campanhas de marketing) e não em qualquer momento.
  5. O que são gates manuais? Como eles se encaixam no pipeline de Continuous Delivery?
  6. ✓ Resposta: Gates manuais são pontos de controle onde uma pessoa precisa aprovar/rejeitar a continuação do pipeline. No Continuous Delivery, o gate mais comum é a aprovação para implantar em produção. Eles são necessários para garantir conformidade ou validação humana antes de expor mudanças aos usuários finais.
  7. Descreva um pipeline simples para Continuous Deployment, incluindo as etapas principais e como o deploy é acionado.
  8. ✓ Resposta: Exemplo: 1. Commit no repositório. 2. CI build e testes unitários. 3. Testes de integração e contrato. 4. Build da imagem Docker. 5. Push da imagem para registry. 6. Deploy automático em ambiente de staging e execução de testes E2E. 7. Se todos os testes passarem, deploy automático em produção usando estratégia canary (por exemplo, 10% do tráfego). 8. Monitoramento de métricas e logs; se tudo ok, aumenta o tráfego para 100%; se falhar, rollback automático.
  9. Considere uma aplicação de saúde que precisa de aprovação regulatória para cada versão. Qual abordagem (Continuous Delivery ou Continuous Deployment) é mais apropriada? Por quê?
  10. ✓ Resposta: Continuous Delivery é mais apropriada, pois permite que o pipeline automatize testes e prepare o artefato, mas exige uma aprovação humana (gate) antes de colocar em produção, garantindo conformidade com requisitos regulatórios e validação por responsáveis legais.

Referências