Diferenças entre integração, deploy e entrega contínua
Atualmente, um dos princípios básicos do desenvolvimento de software se fundamenta na utilização das metodologias eficientes para gestão de um projeto. A aplicação das culturas, práticas e ferramentas do DevOps — Integração, deploy e entrega contínua — foram estimuladas por modelos de implementação da nuvem, principalmente o modelo Plataforma como Serviço (PaaS).
Nele, os seus desenvolvedores dispõem de um conjunto de serviços preliminarmente configurados e alicerçados para hospedar e rodar as suas aplicações, sem precisar depender de uma infraestrutura de servidores inicialmente alocada para os projetos de desenvolvimento.
Essas formas de trabalhar trazem novos conceitos e ferramentas que, juntos, podem causar certa confusão para aqueles que não estão integrados. Apesar de parecidos, os conceitos de integração contínua, deploy e entrega contínua são diferentes e apresentam características distintas. Acompanhe!
Integração contínua
A técnica de integração contínua fundamenta-se em reduzir a quantidade de código integrado à versão principal do software, diminuindo os intervalos entre a produção de código e integração.
Assim, se um desenvolvedor gera uma grande feature, a propensão é que sua funcionalidade seja segmentada em partes menores e adaptadas a uma versão entregável em intervalos reduzidos. Isso impede que, ao final de tudo, haja enorme quantidade de códigos, que possam quebrar funcionalidades do sistema.
Na maioria dos casos, sempre que uma nova versão entregável do software é criada, a integração contínua vem seguida de uma boa estrutura de testes que são automatizados e executados. Assim, os testes asseguram que as novas alterações não tenham gerado nenhum efeito negativo na aplicação.
Encontrar e investigar erros mais rapidamente, melhorar a qualidade do software e diminuir o tempo de validação e lançamento de novas atualizações do sistema são os principais objetivos da integração contínua. Nela, o trabalho do desenvolvedor engloba basicamente as seguintes etapas:
- atualizar a versão do código (branch) para a última versão do software principal;
- fazer alterações no código do software;
- gerar uma nova versão (build) do software com as alterações;
- fazer os testes necessários e corrigir os erros encontrados;
- efetuar convergência (merge) com o código principal, que equivale à integração com o software principal.
O principal benefício da integração contínua é controlar as versões e as alterações feitas no código. Por meio desses controles, será permitido fazer a comparação dos códigos em branches (versões) distintos, evitar que desenvolvedores realizem a mesma tarefa, aumentar o controle da produção de cada desenvolvedor e otimizar o processo de reversão de mudanças que poderão ocasionar algum problema.
Entrega contínua
Após a integração contínua, acontece a entrega contínua. Além da realização de testes, gera uma versão de release cada vez que uma nova integração for feita. Assim, com essa nova versão de release, o desenvolvedor pode verificar como as novas funções ficaram sem precisar se preocupar em enviar ao usuário final, qualquer tipo de feature indesejado.
Recebe o nome de Staging essa área entre a integração e o usuário final — nela, normalmente, caso não tenha problemas para produção, em breve, temos uma versão da aplicação para testes que deverá ser utilizada. Com essa versão na área de Staging, será possível clicar um único botão e todos os usuários finais poderão receber a release, já testada. São três as etapas da entrega contínua:
- integração contínua por meio do controle de versões, padronização da criação dos pacotes e automatização dos builds;
- realização de testes automatizados, que devem ser rigorosos a fim de observar se as novas funções estão de acordo com o produto aguardado e que não vão ocasionar nenhum erro no software existente;
- automatização de deploy, onde há a atualização do software em produção.
É importante reforçar que um dos princípios básicos do DevOps é a automatização dos processos, visto que fazer essa parte do processo de forma manual possivelmente ocasionará em grandes taxas de problemas futuro.
O principal objetivo do processo de entrega contínua é assegurar que as entregas aconteçam de forma eficaz e objetiva. Assim, quando um problema é descoberto em um software ou quando uma nova função é implementada, não será mais preciso esperar por longos períodos para realizar uma atualização geral do sistema.
Em outras palavras, pequenas atualizações e correções são feitas quase que diariamente, elevando o fluxo de entregas da TI.
Deploy contínuo
De fato, esse é o principal ponto de confusão entre os conceitos. O deployment contínuo é muito semelhante à entrega contínua, mas está à frente quando o assunto é automação. Na entrega contínua, estão prontas para deploy em produção todas as mudanças levadas para o repositório principal. Todavia, a interação humana ainda é muito importante no início desse processo.
Mais adiante, a entrega contínua nos deixa uma versão de release, mas ela nunca vai ser distribuída aos usuários finais sem que haja interação humana. O deploy contínuo vai além disso: passa-se por todos os passos das técnicas mencionadas anteriores, mas a aplicação é entregue ao usuário final de maneira automática e a única coisa que vai impedir que o software seja distribuído será uma falha em algum teste feito de forma unitária.
Todas as mudanças que passam no conjunto de testes são colocadas em deploy para produção, como na implantação contínua. Para liberar recursos para usuários finais, ela depende fortemente das Feature Flags.
Essa técnica não se aplica a toda empresa. Ela foi pensada, principalmente, para o desenvolvimento de aplicações para web. Muitas vezes, existem regras de governança rígidas e necessidade de testes manuais que podem impedir a utilização dessa metodologia. Porém, é recomendado que as empresas tenham a possibilidade de tentar aplicá-la, pois possibilita mudanças profundas e positivas no negócio.
Nessa etapa, será essencial assegurar que o ambiente de produção esteja nivelado com os ambientes de testes e homologação. Também, que o ambiente produtivo esteja estável, de forma que com apenas um botão o software entre efetivamente em produção.
Por fim, agora que você já conhece os três conceitos relacionados à integração contínua, cabe escolher qual é o mais adequado para seu projeto. Lembrando que é muito importante entender e saber diferenciar cada um desses pontos para uma boa produtividade nos projetos.
Se você gostou do nosso post sobre integração, deploy e entrega contínua, siga as nossas redes sociais e acompanhe as nossas atualizações: estamos no Facebook, no Twitter e no Linkedin!
William Carvalho
Ótimo texto explicativo. Muito didático e esclarecedor. Parabéns e obrigado ao autor. .
infra
Obrigado William, continue conosco acompanhando as novidades.