Qual a diferença entre Continuous Integration, Continuous Delivery e Continuous Deployment?

Se você já trabalha ou ao menos deu alguma estudada em DevOps, com certeza você já se deparou com três dos termos mais comentados neste assunto: Continuous Integration, Continuous Delivery e Continuous Deployment.

Mas você sabe o que exatamente é cada um deles? Como eles se relacionam? Qual deles você precisa ou poderia usar em seu projeto?

Se você respondeu não a qualquer uma dessas perguntas, este post é para você.

Inclusive eu gravei um vídeo recentemente sobre isso. Se você for alguém mais visual, talvez vá querer assistí-lo:

Apesar do DevOps ser um assunto já bastante solidificado no mercado, ainda existem algumas confusões e mal entendidos em relação a alguns conceitos e definições.

A primeira vez que falei de forma mais profunda sobre isso, acredite ou não, foi no meu primeiro livro, o “Java EE 8 Cookbook”, que em 2020 foi relançado como “Jakarta EE Cookbook”. Se quiser, você pode conferí-lo abaixo:

Vamos às definições:

Continuous Integration (CI), ou Integração Contínua: Basicamente, são as estratégias que garantem que o merge do seu novo código na branch principal (por exemplo, a branch master) ocorra o mais rápido possível e com a maior frequência possível.

Uma justificativa para a sua adoção é que, com merges cada vez mais frequentes, cada vez menos código é inserido em cada merge. E quanto menos código a cada merge, menos erros, menos validações, menos funcionalidades, etc. 

O teste mais utilizado no CI é o teste unitário, especialmente durante o processo de build da aplicação.

Continuous Delivery, ou Entrega Contínua: Isso é um passo além da CI, onde você garante que seu artefato esteja pronto para ser implantado com apenas um clique de botão (ou algo assim). Isso geralmente requer um repositório de artefatos para seus binários e uma ferramenta para gerenciá-lo. Ao usar a entrega contínua, você decide quando fará a implantação. É o estágio intermediário entre o CI e o CD.

A boa prática aqui também é fazer com velocidade e frequência cada vez maiores, diminuindo cada vez mais a quantidade de código novo que entra em produção de uma vez só.

Continuous Deployment (CD), ou Implantação Contínua: Esta é a última parte de automação de última geração. No CD, não há interação humana desde o commit do código até a implantação em produção. A única coisa que impediria um artefato de ser implantado é um erro em qualquer uma das etapas do pipeline. 

Aqui, além dos testes unitários, são largamente utilizados também os testes integrados.

Esta é uma estratégia que exige um alto nível de maturidade em todos os processos do ciclo de vida de desenvolvimento, ao ponto de haver confiança suficiente de que, se algo não estiver funcionando, de fato aquilo não irá para produção de forma automática.

Todos os principais casos de sucesso de microsserviços em todo o mundo usam CD em seus projetos, muitos deles fazendo centenas ou até milhares de implantações diárias.

E aí, já conhecia essas definições? Deixa aqui nos comentários que eu quero saber!

Um grande abraço, até a próxima e tchau!