O que é entrega contínua?
Entrega contínua, no geral, refere-se à preparação automática de código e mudanças de códigos para liberação na produção. Desde a mesclagem de alterações de código até a entrega de compilações que estão prontas para produção. Cada estágio no processo envolve a automatização do teste e liberação do código.
O upload do código é feito para o repositório de código fonte (como o GitHub) ou para o repositório container (como o Docker). Uma vez feito o upload, testes automatizados como unidade, regressão e performance são executados para garantir que o código seja de alta qualidade.
Depois do ciclo completo, o que é programado para execuções é implantado automaticamente em um ambiente intermediário, podendo ser lançado sob demanda pelo time de operações. O objetivo é ter código pronto para implantação em um ambiente de produção.
Neste contexto, o resultado da entrega contínua é o código pronto para a produção, mas não é a implantação em si. Resumindo, a entrega contínua garante a entrega rápida e fácil do código para o time de operações, mas ainda precisa de alguém pra aprovar e liberar o update para produção.
O que é implantação contínua?
A implantação contínua envia, automaticamente, o código testado para a produção. É construída nos benefícios da entrega contínua e é considerada o próximo passo no pipeline da CI/CD. De maneira simples, não há lançamento sob demanda para a produção, o que implica em intervenção humana; em vez disso, o código vai da integração para o lançamento, e o teste é integrado ao processo.
Essa automatização pode ser benéfica para um time de operações sobrecarregado e, com o teste integrado em todos os processos, é mais fácil encontrar problemas e resolvê-los mais cedo. Também é assegurado que não há atraso entre a validação de uma mudança no código e sua liberação para produção. No entanto, é importante notar que o teste e o monitoramento são ainda mais cruciais na implantação contínua por conta da liberação automática para produção.
Dicas para notar a diferença entre entrega contínua e implantação contínua em CI/CD
Quando você explora melhor os termos, a diferença entre entrega contínua e implantação contínua é bem clara. A entrega contínua é como receber uma pizza que você checa os ingredientes e a qualidade antes de colocar na mesa. A implantação contínua é como ter uma transportadora que te entrega regularmente uma pizza que foi monitorada desde o começo para garantir que a qualidade, os ingredientes e o sabor estão dentro das suas expectativas.
Mas quando uma plataforma promete CI/CD sem explicações, como você sabe qual CD é? Aqui estão algumas dicas para perceber a diferença:
- Se a plataforma automatiza processos de construção de “código implantável”, está oferecendo entrega contínua. Como por exemplo a Spinnaker e a AWS CodeBuilder;
- Se a plataforma inclui teste e monitoramento ao longo do processo CI/CD, está oferecendo implantação contínua. Como por exemplo a Azure DevOps e a Red Hat OpenShift.io (note que a Red Hat é agora uma empresa do grupo IBM);
- Se a plataforma é descrita como integração contínua, mas também possibilita automatizar a preparação de código e seu lançamento imediato, provavelmente fornece implantação contínua. O exemplo mais famoso é a Jenkins, que você pode usar para automatizar cada estágio no pipeline CI/CD;
- Se nenhum termo que descreve a plataforma deixa a dica, provavelmente a plataforma de CI/CD oferece implantação contínua.
Trazendo uma nova definição para entrega contínua
Se você segue as tendências e os analistas da indústria, você sabe que a automatização está em todo lugar, e o pipeline DevOps não é exceção. Não impedindo as dificuldades da integração contínua em industrias altamente reguladas, as plataformas CI/CD atuais estão mais propensas a fornecer CI/implantação contínua do que CI/entrega contínua. Quando a Gartner usa entrega contínua, por exemplo, está na verdade falando sobre automatizar o pipeline DevOPs, incluindo a implantação, sem ficar só na entrega de código implantável.
Essa transformação do termo faz sentido. Quando falamos sobre entrega de aplicativos, falamos poeticamente sobre todas as etapas envolvidas até entregar um aplicativo nas mãos de um usuário ou cliente. Considerando que automatização e nuvem são as razões para podermos usar o termo de maneira tão ampla, não é tão forçado assim usar o termo entrega nesse contexto para DevOps.
Na verdade, enquanto a automatização continua sua marcha pelo DevOps, é possível que CI/CD se torne CI/CD/CO, onde CO significa operação contínua ou então, podemos até ver DevOps contínua, transformando tudo em um simples CD.