DevOps – Saiba a diferença entre Integração, Entrega e Implementação contínua

Atualmente um dos principais elementos do desenvolvimento de software se baseia na utilização das metodologias ágeis para gerenciamento de projeto. A aplicação das práticas, culturas e ferramentas do DevOps foram impulssionadas pelos modelos de implementação da nuvem, principalmente o modelo PaaS (Plataforma como Serviço). No qual os desenvolvedores podem contar com um conjunto de serviços préviamente configurados e suportados para hospedarem e rodarem suas aplicações, sem a necessidade de depender de uma infraestutura de servidores préviamente alocadas para os projetos de desenvolvimento.
As novas forma de trabalhar, propostas tanto pelos métodos ágeis quando pelas práticas do DevOps trazem novos conceitos e ferramentas nos quais juntos podem causar uma certa confusão para aqueles que não estão habituados, entre eles é o conceito de Integração Contínua (CI – Continuos Integration) e Implementação Contínua (CD – Continuos Deploy).

 

Integração contínua (Continuous Integration)

A integração contínua é uma prática de desenvolvimento de software na qual desenvolvedores, com frequência, juntam suas alterações de códigos em um repositório central. As mudanças nos software são feitas praticamente à medida que o desenvolver altera o código, sendo assim, é possível trabalhar em diversas versões (branches) que permitem criar versões paralelas do software principal para fazer alterações. A integração contínua se resume na prática de integração e testes de um novo código com base num código existente, e é uma condição necessária para que o processo de entrega contínua possa ocorrer de maneira correta.

O principais objetivos da integração contínua são encontrar e investigar erros mais rapidamente, melhorar a qualidade do software e reduzir o tempo de validação e lançamento de novas atualizações do software.

Em um sistema de integração contínua o trabalho do desenvolvedor envolve basicamente as seguintes etapas:

  1. Realizar a atualização de seu branch (versão do código) para última versão do software principal
  2. Realizar as alterações no código da software
  3. Criar uma nova versão (build) do software com as alterações
  4. Realizar os testes e corrigir os erros
  5. Realizar convergência (merge) com o código principal, que neste caso, corresponde a integração com o software principal

Um dos principais elementos do processo de integração contínua é o monitoramento contínuo das versões do software, justamente para verificar se o desempenho da aplicação se mantem com as atualizações que foram realizadas e, se ocorreram erros, nos quais não foram observadores durante o processo de desenvolvimento ou atualização do código. O monitoramento ajudará também na identificação de problemas em outras áreas do código, principalmente para aplicação com muitos componentes ou módulos.

Um dos principais benefícios da integração contínua é o controle das versões e das alterações realizadas no código, onde através desses controles será possível realizar a comparação dos códigos em diferentes branches (versões), obter um melhor controle da produção de cada desenvolvedor, evitar que desenvolvedores realizem a mesma tarefa e melhorar o processo de reversão de mudanças que causaram algum problema.

Entrega contínua (Continuous Delivery)

A entrega contínua é um processo que permite a entrega incremental de um software de maneira repetível e confiável de forma coesa e eficiente no qual remete a necessidade de mudanças constantes através de um processo automatizado a fim de evitar erros por intervenção manual. Seu principal benefício é garantir que o novo código possa ser implementado no ambiente de produção a qualquer momento.
Na prática a entrega contínua representa o envio do código para um ambiente que poderá ser de Desenvolvimento, Homologação ou Produção, uma vez que o desenvolvedor sente que o código está pronto para ser enviado. Nesta etapa do processo o código está sendo entregue para que os usuários o equipes de testes possam fazer as validações necessárias que irão desde os testes de comportamento, lógica de negócio ou até mesmo testes visuais.

A entrega contínua se baseia principalmente em três etapas:

  1. A integração contínua através do controle de versões, automatização dos builds e a padronização da criação dos pacotes

  2. A execução de testes automatizados, nos quais devem ser rigorosos a fim de verificar se as novas funcionalidades estão em conformidade com o produto esperado e, principalmente não irão causar nenhum erro no software existente

  3. A automatização de deploy, no qual corresponde efetivamente na atualização do software em produção. Vale reforçar aqui que um dos princípios fundamentais do DevOps e a automatização dos processos, uma vez que realizar esta parte do processo manualmente certamente acarretará em grandes taxas de problemas futuro.

O processo de entrega contínua existe justamente para garantir que as entregas ocorram de maneira objetiva e veloz, desta maneira, quando um problema em um software é descoberto ou uma nova funcionalidade é implementada, não será mais necessário esperar por grandes períodos de tempo para uma atualização geral do sistema, ou seja, pequenas atualizações e correções são implementadas quase que diariamente aumentando assim o fluxo de entregas da TI.

A entrega contínua é o principal ponto de convergência entre as equipes de desenvolvimento e operações, sendo nesta etapa do processo que ocorrem os maiores conflitos entre as necessidades e objetivos de cada time. É neste ponto que a proposta do DevOps remete a necessidade de uma mudança cultural na TI, onde será necessário encorajar a prática colaborativa e principalmente a comunicação eficiente entre as equipes.

Implementação contínua (Continuous Deployment)

Considero este o principal ponto de confusão entre os conceitos. É muito comum ouvirmos pessoas falando de entrega e implementação contínua de forma alternada como se fossem o mesmo processo. Já enfatizamos que nenhum software gera valor sem antes entrar em produção, sendo assim, é nesta parte do processo que o valor é gerado. Esta parte do processo aborda a questão de automatização do processo de publicação no ambiente de produção, tão logo você esteja certo de que o código passou por todos os testes e está pronto para ser disponibilizado para o cliente final.
Nesta fase assume-se que o código passou pelo processo de integração, no qual é responsável por testes de integração ou testes unitários, e também foi avançando no processo de entrega com os testes manuais, visuais e de comportamento e que agora, no processo de implementação contínua será tratada apenas a questão da publicação automatizada no ambiente de produção.
Será fundamental nesta etapa garantir que o ambiente de produção esteja equalizado com os ambientes de homologação e testes, assim como, que o ambiente produtivo esteja estável, de maneira que basta apertar um botão para que o software entre efetivamente em produção.

 

Autor: Daniel Rosa

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *