A integração Contínua é uma das práticas principais do DevOps, ela permite a implementação do Fluxo de Uma Peça e com isso, a possibilidade de diminuir o tamanho do lote de entrega. Mas porque tudo isso é importante? Vamos neste pequeno artigo mostrar o que é, seus benefícios, as práticas específicas e as dificuldades da sua adoção.

 

O que é a Integração Contínua?

Então vamos ao primeiro questionamento, ao final o que é a Integração Contínua? A Integração Contínua é uma disciplina que permite em curtos período de tempo, na ordem de horas, juntar o trabalho de vários colaboradores em uma versão consistente.

Podemos usar a metáfora de vários autores que estão junto escrevendo um livro único. Se há vários autores, o trabalho precisa convergir em um resultado consistente, coerente, orquestrado tanto em assuntos que sejam bem construídos, não repetidos e fluidos.

Primeira abordagem

Uma primeira abordagem poderia ser a seguinte: podemos direcionar os esforços individuais dos autores a um trabalho isolado, dividindo este os especialistas os temas, que precisa ser escrito, cada um deles pode ter uma meta de voltar com seu capitulo pronto após um ou dois meses para reunir os trabalhos, avaliar o resultado, corrigir e integrar os capítulos e formatar o livro.  Esta forma de trabalho privilegia a produtividade individual, mas por sua vez, mas tem alguns problemas que requerem de um esforço considerável para hora de realizar a integração: podemos encontrar ideias contraditórias ou repetidas, ou inclusive, inconclusas que podem derivar em verdadeiros conflitos entre os autores para conseguir convergir na hora de priorizar quais parágrafos ficam ou quais precisam ser alterados ou eventualmente eliminados. Podemos ter problemas de estilos de escritas, de nível de detalhamentos distintos e até de faltas de ortografias e modos de se expressar. Isso pode gerar muito retrabalho comprometendo muitas vezes a qualidade e prazos. Devido a que é um trabalho intelectual, igual que a codificação e o desenvolvimento de sistemas, podemos observar que montar o quebra cabeça da solução após um período pode demandar um esforço árduo.

Segunda abordagem

Uma segunda maneira de trabalhar poderia ser a seguinte: cada autor, a cada instante que escreve uma pequena porção do livro, um parágrafo por exemplo, pode ele mesmo integrar seu trabalho em forma regular em uma versão final, que está sendo atualizada por todos os restantes autores, também de forma contínua. Desta maneira, toda vez que há necessidade de “salvar” sua contribuição, há necessidade de ler o que foi escrito e atualizado pelos colegas, para evitar desvios ou inconsistências. Assim, o processo de integração é realizado em forma contínua, a cada pequeno aporte individual. A versão final do livro é publicada desde o início (podemos mostrar ao público usuário, leitores, caso desejemos, alguns capítulos ou parte deles ou todo ele, caso seja necessário – feature flag) e evoluída a cada contribuição. Esta maneira privilegia a produtividade do time, permitindo diminuir os desperdícios presentes no primeiro modo: o estilo é uniformizado, os esforços de ajustes e conflitos são minimizados, a solução é construída com mais qualidade e colaboração, e todos se sentem parte, responsáveis pelo resultado desde o início.

 

Como conseguir aplicar a Integração Contínua?

Para conseguir aplicar a Integração Contínua em um grupo de desenvolvedores, há necessidade de mudar a maneira tradicional de codificar e contribuir com código. Alguns pontos importantes que sustentam a prática:

– Um servidor de integração Contínua, configurado para utilizar a master o trunk como orientação de desenvolvimento. Este servidor deve após cada “commit”, validar o código, em várias frente: build corretos (ou seja compila – sem erros de ortografia e interfaces), testes unitário de de integração, testes de “caixa branca” exigindo aderência a padrões de programação segura e políticas da segurança, análise de código para evitar o uso de padrões não desejados;

– Disciplina para não acumular código por muito tempo (estoques intermediários) que poderão desestimular a prática e demandar esforços grandes para realizar a integração;

– Monitoração e telemetria da atividade, para acompanhar tempos de execução curtos na validação (Build-Análise de Código-Teste). Qualquer tempinho a mais, pode comprometer a frequência de commit;

– Técnicas de Desenvolvimento, por exemplo, branching por abstração (que permite a convivência da versão atual e nova simultaneamente), TDD (Test Driven Development – permite contribuir com Testes Unitário de uma maneira mais sólida e robusta), Pair Programming (permite equilibrar competências, estilos, aprendizados e gargalos em situações mais complexas), Revisão em Pares, etc.

 

Benefícios integração contínua

Além dos benefícios anteriormente mencionados, relacionados com a minimização de vários desperdícios, temos também a possibilidade de implementar o fluxo de uma peça, dando continuidade com etapas seguintes do processo como Entrega Contínua (validar a solução do ponto de vista de Requisitos Funcionais e Não Funcionais da Solução) e a Implantação Contínua (minimizando as diferenças entre as versões implantada, que permite minimizar riscos e esforços para estabilizar imprevistos com mudanças de tipo padrão. estas disciplinas permitem aumentar a colaboração, empatia, senso de responsabilidade da equipe, estimula a participação ativa de todos e o aprendizado contínuo com novas competências profissionais. estas são as bases do DevOps.

Leave a Reply