Os novos sistemas de trabalho propostos pelos métodos ágeis e pelas práticas do DevOps trazem conceitos e ferramentas novos. Dos quais unidos podem gerar uma confusão aqueles que não estão habituados, o conceito de entrega e integração contínua são exemplos disso.

Hoje, um dos elementos principais no desenvolvimento de software. Ele tem como base a utilização das metodologias ágeis para o gerenciamento de projeto. Os modelos de implementação da nuvem impulsionaram a aplicação das práticas, culturas e ferramentas do DevOps.

Neste artigo falaremos um pouco mais a respeito da entrega e integração contínua. Assim abordando ainda questões as questões de como aliar ambos conceitos e ainda como o cliente pode utilizar os dois ao mesmo tempo.

O que é a entrega e integração contínua?

A princípio é importante falar a respeito das características da entrega e integração contínua individualmente para entender seus conceitos.

Integração contínua (Continuous Integration)

A integração contínua trata-se de uma prática de desenvolvimento de software, em que com certa frequência, desenvolvedores unem suas alterações de códigos num repositório central. A mudança nos softwares são feitas a medida que o desenvolvedor altera o código, desta forma, é possível atuar em muitas versões que fazem com que criar versões paralelas do software principal, seja possível.

A integração contínua resume-se na prática de testes e integrações de um novo código, baseado num código que já existe, e é também uma das condições necessárias para que o processo de entrega possa acontecer de forma correta.

Os objetivos principais da integração contínua são não só investigar mas também encontrar erros de forma rápida, além de aprimorar a qualidade do software, reduzindo assim o tempo de lançamento e validação de atualização novas do software.

Veja as vantagens

  • Fazer a atualização do seu branch, que é a versão do código, para a última versão do código principal;
  • Criar uma versão nova do código do software com as devidas alterações;
  • Fazer testes e corrigi-los;
  • Fazer a convergência com o código principal;
  • Fazer alterações no código do software.

Podemos dizer ainda que o monitoramento contínuo das versões do software é um dos principais elementos do processo da integração contínua, isso para que se verifique se o desempenho da aplicação está mantendo as atualizações que foram feitas e também se ocorreram erros que podem ter sido observados no processo de atualização e desenvolvimento do código.

O monitoramento também contribui para a identificação de problemas nas outras áreas do código,  sobretudo para a aplicação com muitos módulos e componentes.

A integração contínua ainda apresenta diversos benefícios, um dos principais é o controle das alterações e das versões realizadas no código, em que por meio desses controles se faz possível fazer a comparação dos códigos nas diferentes versões.

Ter um controle melhor da produção de cada desenvolvedor em particular, evita que os desenvolvedores de repente realizem uma mesma tarefa, e isso melhora o processo de reversão de mudanças, que podem causar algum problema.

Entrega contínua (Continuous Delivery)

 

A entrega contínua trata-se de um processo que permite uma entrega incremental de um software de forma repetível e também confiável, coesa e eficiente na qual remete ainda a necessidade de mudanças através de um processo automatizado com o objetivo de evitar erros por intervenções manuais.

O principal benefício da entrega contínua é garantir que o novo código possa ser, a qualquer momento, implementado no ambiente de produção. Na prática, ela diz respeito ao envio do código a um ambiente que pode ser de homologação, produção ou desenvolvimento.

É nesta fase do processo que o código está sendo entregue, que os usuários e as equipes de teste fazem as validações que precisam ser realizadas desde os testes de lógica de negócio, comportamento até os testes virtuais.

As etapas que envolvem a entrega contínua, baseia-se na:

  • Integração contínua por meio do controle de versões, padronização da criação dos pacotes e automatização dos builds;
  • Execução de testes automatizados, estes precisam ser rigorosos para verificar se as novas funcionalidades encontram-se em conformidade com o que se espera do produto, e também para verificar se não irão gerar nenhum erro no software existente;
  • Automatização do deploy, este corresponde na atualização do software de produção. Um dos princípios fundamentais do DevOps é automatização dos processos, pois se esta parte do processo for realizada manualmente, acarretará em muitos problemas futuros.

É justamente para garantir a entrega contínua de forma objetiva e rápida que existem os processos da entrega contínua. Assim, ao descobrir um problema de software  ou ainda uma funcionalidade nova implementada, não se faz necessário aguardar longos períodos de tempo para a atualização geral do sistema, podemos dizer então que as pequenas correções e atualizações podem ser implementadas praticamente diariamente, elevando o fluxo de entregas de TI.

A entrega continua diz respeito ao ponto principal de convergência entre equipes de operações e desenvolvimento, nesta etapa do processo é que acontece os conflitos maiores entre os objetivos e as necessidades de cada equipe. Neste ponto ainda, a proposta do DevOps evidencia a mudança cultural que a TI necessita.

Como aliar a integração e entrega contínua?

A integração entrega contínua, juntas formam o chamado CICD. Empresas como Netflix e Facebook utilizam o CICD para completar diversos lançamentos semanais (10 ou mais). Há ainda empresas que procuram bater esse ritmo, pois elas acabam cometendo algumas armadilhas, como :

  • Automatizar os processos errados;
  • Confundir a implantação contínua com a entrega contínua;
  • Não ter dashboards e métricas significativas;
  • Faltar coordenação entre a CI e CD;
  • Balancear a frequência de execução de trabalhos de IC e a utilização de recursos.

Pelo consenso de DevOps, CI e CD são duas coisas diferentes, entretanto CI alimenta CD, de forma que a implementação de um pipeline CI num sistema CD completo dura meses e ainda demanda a colaboração e garantia na qualidade pela equipe de DevOps, Scrum máster e engenheiros de operação.

Desafios

Podemos dizer ainda que o fator humano é o aspecto mais difícil de CICD, mais até que os desafios técnicos. Desta forma, como não é possível programar um relacionamento saudável entre duas pessoas, também não se pode programar a comunicação e colaboração.

A Netflix, por exemplo, é uma empresa que pode completar a integração, o teste e a entrega em tempos curtos como de duas a três horas. Estabeleceram um sistema em que passa o código de mão em mão, sem que haja discussão ou indecisão.

A implantação contínua é o conceito em que todas as alterações realizadas no código são praticamente implantadas de maneira imediata para a produção. Muitas organizações veem isso como algo terrível, isso porque rápidas mudanças podem assustar os usuários.

Assim, as empresas passam a acreditar de que se elas não estiverem praticando a implantação contínua, não estarão fazendo CD. Desta forma, não conseguem diferenciar entre entrega contínua e implantação contínua.

Novo conceito de entrega contínua

Nesta linha de pensamento, a entrega contínua é o conceito no qual as alterações no código base, passam pode ambientes de não produção antes. Isso quer dizer que a equipe acha e também aborda questões de maneira imediata, e não depois, quando já tiverem liberado o código ao uso. E liberar o código-base para a produção trata-se de uma decisão de negócios.

É possível concluirmos então  que CICD é fundamental, pois ele atende as demandas e objetivos do negócio. Os executivos da tecnologia compreendem o fato de que a evolução contínua, os consertos rápidos e também a garantia da qualidade, auxiliam a reter os clientes.

O DevOps tem a oportunidade de gerar uma melhor experiência de trabalho melhor a sua equipe.

Como o cliente pode utilizar os dois ao mesmo tempo?

As empresas que fazem a mudança do desenvolvimento em cascata para o Devops muitas vezes caem na armadilha de automatizar os processos de forma errada.

As novas organizações novas tem a vantagem de implementar o CICD do ponto inicial. Enquanto que as já existentes necessitam mover-se de maneira gradativa do desenvolvimento manual ao altamente automatizado. Essa transição pode levar meses para ser completada, por isso é importante saber como você irá adotar o CICD.

Além de se perguntar se a automatização deve ocorrer naquele momento, outras questões devem ser abordadas, como:

  • Quanto tempo dura o processo?
  • Quais pessoas e dependências de recursos estão envolvidos no processo?
  • Eles estão causando atrasos na CICD?
  • Com que frequência o processo ou cenário é repetido?
  • É o processo sujeito a erros, se não for automatizado?
  • Qual é a urgência em adotar o processo automatizado?

Priorize etapas

Utilizando esses questionamentos será possível priorizar etapas numa implantação CICD. Inicialmente, automatizar o processo de compilação do código pode ser o primeiro passo. É necessário interagir o código diversas vezes ao dia. De forma manual, esse processo pode levar alguns minutos e até horas, atrasando a tarefa. Também é um processo susceptível ao erro humano, por isso é uma vantagem optar pelo desenvolvimento automatizado.

Podemos ainda executar a mesma lista aos testes de verificação. Uma vez em transição ao CICD, é possível você se questionar quanto a necessidade ou não de automatizar todos os testes.Mesmo que inicialmente os testes funcionais de UI.

Caso você automatize testes funcionais, pode não precisar atualizar o script de automação. Entretanto, a interface o usuário altera diversas vezes e isso requer frequentes mudanças de roteiro. Apesar de serem propensos a erro, deve-se priorizar o teste funcional antes do de interface do usuário. Para que assim possa ser feito o uso melhor dos recursos.

Tendo os recursos ilimitados, você provavelmente vai optar pela automatização de tudo que for possível. Entretanto não pode atingir a total automação dos testes. Você pode ainda quebrar as tarefas em segmentos menores para automatiza-los por partes.

Assim como pode simplesmente documentar os processos detalhadamente, e executa-lo de forma manual.

Histórico

Devido ao histórico da indústria de tecnologia, o tempo de ciclo de vida de um ideia ou iniciativa até a sua implantação em produção não é curto. Com a entrega contínua, equipes de desenvolvimento entregam as suas novas versões de software à produção de maneira contínua. Assim reduzindo este tempo e automatizando ainda todo processo da construção, da implantação, ao realese, ao teste.

No entanto, isso é possível apenas com a mudança na cultura e com a melhor integração entre áreas de operações. E as áreas de desenvolvimento, levando assim ao conceito de DevOps.

Esta track objetiva a entrega ágil de produtos, iniciando em sua concepção e tirando as barreiras existentes entre as áreas de operações e de desenvolvimento.

A entrega ágil de valor, valoriza o indivíduo com relação a documentos, afinal vai além da discussão de um contrato. Isso significa o engajamento entre o cliente, profissional e usuário em busca do produto ideal.

Esta integração precisa ser acompanhada por uma configuração organizacional, na qual a experimentação e entrega constante. Portanto trata-se de um elemento cultural, além de um trabalho em equipe e melhora contínua.

Toda esta configuração diz respeito ao termo de mindset ágil. O qual consiste na ideia de uma empresa moldada ao segmento do método ágil.

Assim a entrega e integração contínua, é um  método ágil de entrega divide o projeto em ciclos e trata-se da entrega contínua através de MVPs e protótipos. Com a finalidade de alinhar as expectativas dos clientes e do profissional.  Chegando assim, a um produto final com eficiência e também assertividade.

Novos códigos

Com  entrega e integração contínua, é possível que cada alteração de código seja criada, testada e também enviada a um ambiente de preparação ou teste, não pertencente a produção.

É possível assim que hajam diversos estágios de teste paralelos antes de que uma ordem de produção seja implantada. O que diferencia a entrega e integração contínua é a presença de uma aprovação que seja manual para a atualização do ambiente de produção.

Desta forma, com a implantação contínua, a atualização da produção acontece de maneira automática sem que haja aprovação explicita. Usar uma técnica de entrega te auxiliará muito a manter o seu código frequentemente revisados pelos testes unitários e ainda entrega-lo apenas para o usuário final quando estiver finalizado realmente.

Gostou do artigo? Então compartilhe em suas redes sociais e caso tenha ficado ainda alguma dúvida deixe nos comentários para que possamos esclarece-la.