Entrega Contínua

Tudo que você precisa saber sobre Entrega Contínua de Software – 4 – Estágio de Commit

Após a explicação resumida do processo de um pipeline de implantação, agora faz-se necessário aprofundar em cada estágio explicando qual ferramenta open source melhor se adequa para sua implementação, seguindo as práticas recomendadas.

Como base para o pipeline é importante destacar duas ferramentas que serão fundamentais em diversos estágios. São elas o sistema de controle de versão e o servidor de integração contínua (IC).

O sistema de controle de versão é responsável por registrar mudanças feitas em arquivos ao longo do tempo, de forma que possa-se recuperar e auditar versões específicas. Se faz necessário para trabalho em equipe, facilitando a integração do código fonte, pois cria um repositório principal e a cada atualização de um desenvolvedor, o código é comparado e apenas as modificações são atualizadas. Garantido que o repositório sempre esteja com a última versão. É base para integração contínua.

Existem inúmeras ferramentas de controle de versão, uma das mais importantes é o Git. Devido sua popularidade, sua eficácia em atender o necessário para o pipeline de implantação e por possuir desempenho satisfatório, Git é um sistema de controle de versão distribuído, usado de pequenos a grandes projetos, independente da linguagem utilizada.

Outras vantagens são a maior facilidade em trabalhar com ramos que seus concorrentes. Um sistema gráfico para gerenciar repositórios é o GitLab, que possui recursos para revisão de código, rastreamento de erros e ferramentas nativas para entrega contínua. O papel do servidor de IC é automatizar o processo de integração contínua, ele também coordena todo o pipeline de implantação, iniciando os estágios automatizados e disparando os procedimentos necessários, como compilação do código e envio e recuperação no repositório de artefatos.

A ferramenta de IC definida foi o Jenkins utilizando o plugin para entrega contínua Blue Ocean. Sua escolha foi principalmente por ser um software robusto, sua popularidade em empresas de software, estar sempre em constante evolução e atender todas as práticas propostas para entrega contínua. Além de possuir integração com todas as outras ferramentas utilizadas no presente trabalho.

O plugin Blue Ocean foi desenvolvido com foco exclusivo em entrega contínua, possuindo interface gráfica para criar e editar o pipeline de implantação, possui também um dashboard para acompanhar as instâncias do pipeline, fornecendo feedback imediato e possibilitando o diagnóstico de problemas instantaneamente. A Figura abaixo mostra uma instância de pipeline no Jenkins/Blue Ocean no qual houve êxito.

jenkins
Instância de um Pipeline de Implantação – Fonte: https://jenkins.io

Estágio de Commit

O objetivo deste primeiro estágio do pipeline é eliminar compilações que não estejam aptas para produção e fornecer feedback o mais rápido possível para a equipe de desenvolvimento. Este estágio garante que o sistema funcione em um nível técnico.

Segundo Humble e Farley (2014) o estágio de commit deve contemplar os seguintes
passos:

  • Compilar o código (se necessário);
  • Executar um conjunto de testes de commit;
  • Criar binários para uso nos demais estágios;
  • Realizar análise de código para verificar sua qualidade;
  • Preparar artefatos, como banco de dados, para uso nos demais estágios.

O primeiro passo se refere a construção da aplicação, no qual todos os componentes do projetos são empacotados. Neste passo, faz-se necessário a utilização de uma ferramentapara automatização da compilação. Apache Maven é a mais popular para projetos Java, e também pode ser utilizada em outras plataformas, é considerado simples de se usar, através de configuração em arquivo XML e é bastante eficaz no que se propõe. O Maven também auxilia no gerenciamento de dependências e na geração de relatórios de testes e da compilação.

Serão executados também um conjunto de testes, mencionados como testes de commit mas que se referem, em sua maioria, a testes unitários e mais alguns outros tipos levantados de acordo com cada projeto. Como ferramenta para a aplicação de testes unitários para a linguagem Java, destaca-se o JUnit que fornece um conjunto de classes completa para criação e execução dos testes, também gerando relatórios sobre eles.

No estágio de commit também deve-se analisar o código para garantir que sua qualidade esteja dentro dos padrões estabelecidos. Uma ferramenta multi-linguagem bastante eficaz para análise de código é o SonarQube, que permite verificar a complexidade e duplicidade de código, comentários utilizados, cobertura de testes, além de possuir uma variedade grande de configurações e plugins.

Caso haja sucesso na execução dos testes e análises, o próprio Maven se encarrega de gerar os artefatos necessários. Esses artefatos são enviados, via script no Jenkins para o repositório de artefatos, onde poderão ser recuperados nos próximos estágios do pipeline.

Um repositório de artefatos possui uma série de benefícios, como manter versionado os snapshots dos artefatos do projeto, podendo-se recuperar qualquer versão de maneira fácil e sem precisar passar por um processo de compilação novamente, além de possuir controle de acesso, aumentando a segurança sobre eles. Como repositório de artefatos é importante mencionar o Nexus, que é bastante utilizado e é o padrão para aplicações Maven.

Outros artefatos, também devem ser fornecidos para os próximos estágios, destacando-se o banco de dados, que deve criado, atualizado ou preparado para os ambientes posteriores. Uma ferramenta para automatizar esse processo é o Flyway, que possui simples configuração, integração com Jenkins e suporte para inúmeros bancos de dados.

No próximo post serão detalhados os estágios de testes do pipeline de implantação. Acesse aqui.

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair /  Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

Conectando a %s