Entrega vs implantação contínua
Esta aula explora as diferenças entre entrega contínua (Continuous Delivery) e implantação contínua (Continuous Deployment), incluindo o papel dos gates manuais e quando aplicar cada abordagem. Você aprenderá a escolher a estratégia certa para seu contexto de DevOps.
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
- Explique com suas palavras a principal diferença entre Continuous Delivery e Continuous Deployment. Dê um exemplo de cenário para cada.
- Cite pelo menos três situações em que você escolheria Continuous Delivery em vez de Continuous Deployment. Justifique.
- O que são gates manuais? Como eles se encaixam no pipeline de Continuous Delivery?
- Descreva um pipeline simples para Continuous Deployment, incluindo as etapas principais e como o deploy é acionado.
- 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ê?