Neste artigo, vamos falar sobre Integração e Entrega Contínua. A ideia é desmitificar um pouco esse tema e conhecer os principais aspectos dessa abordagem como preparação para os diversos concursos, já que volta e meia esse assunto tem sido cobrado. Primeiro, vamos começar falando da Integração Contínua.
Integração Contínua (Continuos Integration – CI)
A Integração Contínua (Continuos Integration – CI), segundo Martin Fowler, é uma prática de desenvolvimento de software na qual os membros de um time integram seu trabalho frequentemente, podendo haver inúmeras integrações por dia – cada uma delas é verificada por um build automatizado para detectar erros de integração o mais rápido possível.
Com a integração do código mais eficiente entre as equipes de desenvolvimento, o trabalho demandado para o processo de integração é totalmente reduzido. Outro ponto de melhoria com a Integração Contínua é a automatização dos testes, que facilita a localização e correção de bugs no código, garantindo o funcionamento do produto ou aplicação.
A principal necessidade para se adotar a Integração Contínua é possuir ferramentas para poder controlar e gerenciar as versões, como Gitlab ou Github.
Controle de Versão ou Versionamento
O controle de versão é uma parte crucial no trabalho de desenvolvimento e para o sucesso da Integração Contínua, além de ser essencial para a aplicação de metodologias ágeis como o XP. Seu principal objetivo é fomentar o trabalho colaborativo entre a equipe de desenvolvimento, compartilhando dados.
Esse tipo de ferramenta propõe-se a resolver grandes problemas do trabalho em equipe, como no compartilhamento de informações, garantindo que a última versão disponível é a válida, além de possuir informações a respeito de quem fez as alterações, assim como prevenir o retrabalho dos desenvolvedores em etapas que já foram vencidas.
Entrega Contínua (Continuos Delivery – CD)
Trata-se de uma abordagem em que as equipes de desenvolvimento realizam o lançamento dos produtos ou aplicações de forma frequente, previsível e automatizada. Dessa forma, as grandes entregas realizadas de uma vez são substituídas por pequenas e rápidas entregas, diminuindo as possibilidades de erros e aumentando o controle das versões e mudanças realizadas nos produtos ou aplicações.
Uma vez que o programador entende que as modificações realizadas estão prontas para seguir para as validações finais, um deploy automatizado do novo código é feito nos ambientes que antecedem o de produção. Geralmente são criados ambientes de desenvolvimento ou homologação com réplicas dos servidores de aplicação e banco de dados para possibilitar o recebimento dessas modificações antes da entrada em produção, evitando assim possíveis erros com o novo código que será entregue.
Usando essa sistemática, as atualizações do produto ou da aplicação em desenvolvimento são disponibilizadas em tempos muito mais curtos, com um custo menor, de forma mais objetiva, não comprometendo a qualidade.
Esse tipo de lógica é bastante simples, consiste em: quanto mais tempo passar antes da entrega de um produto ou aplicação, maior será o custo do projeto e menor será a viabilidade para os desenvolvedores, uma vez que, ao aumentar o intervalo entre as entregas, o volume de linhas de código necessárias para desenvolver naquela aplicação será proporcionalmente maior.
Entrega Contínua e DevOps
Contextualizando e conceituando a respeito de DevOps, outro ponto que será abordado em breve em nosso blog, o termo se origina da junção das palavras “Desenvolvimento” e “Operações”, com o objetivo de unificar o desenvolvimento e a operação de software.
Com a Entrega Contínua, embarca a aplicação de conceitos diversas metodologias ágeis como o XP, Scrum, Kanban etc. O objetivo final está na automação dos processos de lançamento de atualizações do produto ou aplicação, gerenciar e controlar suas versões e configurações, produzindo soluções que são funcionais e com valor agregado para os usuários.
Aplicando a Entrega Contínua
Para que a Entrega Contínua funcione, alguns pontos de implementação são necessários, como:
- colaboração contínua de toda a equipe responsável pelo produto ou aplicação;
- agilidade nas decisões e resoluções de problemas;
- adaptação ao inesperado e a como o produto ou aplicação pode evoluir perante os obstáculos;
- responsabilidade com o projeto, além de alinhamento dos objetivos do projeto com toda a equipe.
Diferentemente do que acontecia com o modelo de entrega cascata, em que uma etapa só era realizada ao término da sua antecessora, entende-se que o ciclo de vida do software não é mais linear: na Entrega Contínua, uma versão, uma atualização, pode ir da equipe de desenvolvimento direto para a produção sem passar pelo ambiente de homologação.
Essa mudança de um modelo mais linear (cascata) para uma abordagem mais ágil possui a vantagem de estar mais próxima da realidade no modo como os produtos ou aplicações são gerenciados.
A necessidade de entregar uma mudança ou alteração em qualquer ambiente de forma urgente, ou “pra ontem”, é extremamente comum, além de extremamente problemática. As aplicações dos princípios que vimos no conteúdo deste artigo ajudam a criar uma forma de trabalho para melhorar a capacidade de enfrentar esses tipos de situação.
Ao implementar, na sua equipe ou empresa, a metodologia de entrega contínua, um dos pontos mais importantes é possuir um início bem desenhado, o que vai garantir que o novo processo seja bem-sucedido, mantendo a equipe motivada e comprometida.
Vamos ver agora algumas questões para podermos entender como as bancas cobram esse conteúdo nos certames. O gabarito está no final do artigo.
- (2015/CESPE/TRE-RS/ANALISTA JUDICIÁRIO-ANÁLISE DE SISTEMAS) Quanto às técnicas de entrega contínua e de integração contínua, é correto afirmar que:
- a) o objetivo da integração contínua é manter o software em um estado funcional ininterrupto.
- b) é evitada a compilação do código da aplicação a cada mudança realizada, na integração contínua.
- c) as duas técnicas são independentes, embora a técnica de integração contínua preceda a de entrega contínua.
- d) a integração contínua, caso o processo de compilação esteja quebrado, logo identifica a causa do problema e a corrige.
- e) é recomendável um sistema de controle de versão centralizado, quando se implementa a integração contínua.
- (2015/CESPE/TCU/AUDITOR FEDERAL DE CONTROLE EXTERNO-TECNOLOGIA DA INFORMAÇÃO) Acerca de integração contínua e entrega contínua, julgue o próximo item.
Para que a prática de integração contínua seja eficiente, é necessário parametrizar e automatizar várias atividades relativas à gerência da configuração, não somente do código-fonte produzido, mas também de bibliotecas e componentes externos.
Agradecimentos
Agradeço ao amigo Sérgio Sierro, com quem divido a autoria deste artigo, excelente profissional de infraestrutura, com experiência no setor público e privado.
Referências
[1] https://www.opus-software.com.br/o-que-e-entrega-continua/
[2] https://www.4linux.com.br/diferencas-entre-integracao-deploy-e-entrega-continua
[3] https://blog.runrun.it/entrega-continua/
[4] https://www.devmedia.com.br/entrega-continua-de-software-revista-net-magazine-100/26312
[6] https://www.devmedia.com.br/integracao-continua-uma-introducao-ao-assunto/28002
[7] https://www.opus-software.com.br/o-que-e-integracao-continua/
[8] https://blog.caelum.com.br/integracao-continua/
Gabarito:
- A
- CERTO