Versionamento de Sistemas, Artefatos e Componentes

Olá pessoal, hoje iremos abordar um assunto voltado para arquitetura de sistemas, onde vamos analisar como realizar um bom versionamento de artefatos e componentes utilizando o Maven.

Os Artefatos

Quando desenvolvemos um sistema Java, iremos ao final gerar algum tipo de artefato para a implantação, seja ele um JAR, WAR, ou EAR.

Ao utilizar o Maven em nossos projetos, temos o chamado GAV no arquivo pom.xml, que são itens obrigatórios para todo tipo de artefato, o GAV é a abreviação de:
  • G (<groupId>): Grupo de trabalho, aqui é um local onde podemos armazenar um grupo artefatos, que fazem parte de um sistema final, exemplo: br.com.cvinicius.erp;
  • A (<artifactId>): Identificação do artefato gerado, este é o nome que terá o artefato, exemplo: erp-web;
  • V (<version>): Versão do artefato, define a versão do artefato gerado, geralmente representado por casas decimais, exemplo: 1.0.0.

O Que é Versionamento

O versionamento é  uma forma de atrelar um conjunto de requisitos, com um nome ou uma numeração, por exemplo:
  • Versão 1.0.0: Login e Cadastro de Clientes;
  • Versão 1.1.0: 1.0 + Relatório de Clientes.
Para definir como será realizado o versionamento, podemos levar em conta vários fatores, o versionamento devem ajudar a equipe na hora de rastrear um bug, implementar uma nova funcionalidade ou criar um novo release de um sistema ou artefato.

Um exemplo que podemos seguir, é o que geralmente é aplicado nos projetos que são alocados nos repositórios do Maven, onde as versões são baseadas em números, como o abaixo:

Versões de um artefato no repositório local do Maven.
No exemplo, temos a representação de um artefato sendo versionado no repositório local do Maven, aqui temos um versionamento com 3 casas decimais, assim podemos rastrear bugs, melhorias e novos releases.

Atrelando Versões com a Gestão de Requisitos

Agora uma pergunta muito importante, como sabemos o que há em cada versão ?

Essa pergunta é um dos pontos mais importantes para que tenhamos um bom versionamento, pois não adianta termos todos os artefatos versionados, mas sem saber quais tarefas foram realizadas em cada versão.

É comum em equipes de desenvolvimento o uso de ferramentas de gestão de requisitos, bug trackers, controle de atividades, etc, vou listar algumas com quais já tive alguma experiência e que podem ser integradas ao nosso padrão de versionamento:


Em cada uma dessas ferramentas temos a distribuição dos projetos, onde cada projeto tem suas versões, atividades, cronogramas, documentação, etc.

Para entender como funciona claramente a integração entre os requisitos com as versões, vamos analisar o exemplo abaixo:

  • ERP
    • 1.0.0 
      • Descrição
        • Módulo de Clientes;
      • Atividades
        • Issue #1;
        • Issue #2;
        • Issue #3;
    • 1.0.1
      • Descrição
        • Correção no Relatório de Clientes
      • Atividades
        • Issue #4;
        • Issue #5;
    • 1.1.0
      • Descrição
        • Módulo de Faturamento;
      • Atividades
        • Issue #6
        • Issue #7;
        • Issue #8.
No exemplo acima temos uma distribuição de um Projeto, Versões e Atividades, agora conseguimos atrelar um código de versão com um artefato.

Qual a vantagem dessa abordagem ?

As vantagens dessa abordagem são muitas, vamos listar algumas delas:
  • Sabemos o que há em cada versão;
  • Controle das atividades realizadas em cada versão;
  • Desenvolvedor responsável por uma determinada alteração;
  • Facilidade de implantação em ambientes de desenvolvimento, homologação e produção.

Repositórios de Artefatos

Um item importante em um bom versionamento, são os repositórios, esses são os locais onde serão armazenados os artefatos, com Maven podemos trabalhar com 2 tipos de repositórios:
  • Local: Esse tipo de repositório é padrão ao se trabalhar com Maven, sempre será criado com base no usuário local da máquina;
  • Global: É um repositório central dentro de uma empresa ou rede, aqui podemos ter um ponto central de armazenamento dos artefatos, assim facilitando uma busca e implantações futuras.

Gerenciadores de Repositórios

Administrar e gerenciar repositórios de artefatos não é uma tarefa fácil, por isso existem várias ferramentas que ajudam nessa missão, um exemplo delas é o Sonatype Nexus.

O Nexus é um gerenciador de artefatos que os centraliza para facilitar a manipulação, gerenciamento, download e reuso dos artefatos, também é importante para armazenar os artefatos das APIs e Frameworks auxiliares que são utilizados nos projetos da empresa, como exemplo: Hibernate e Spring.

Interface principal do Nexus.

Principais funcionalidades do Nexus
  • Centralizar os artefatos fazendo um cache, para servir aos desenvolvedores nas solicitações;
  • Reuso de artefatos, evitando downloads desnecessários e problemas de compatibilidade;
  • Catalogar os componentes e artefatos da empresa.

Ao trabalhar com Gestão de Requisitos + Maven + Versionamento + Repositório Global, temos um melhor gerenciamento do ciclo de vida dos sistemas e componentes da empresa, esse gerenciamento é o ponto de partida para evoluir o ambiente até chegar em recursos mais avançados de Integração e Entrega Contínua.

Até a próxima.

Comentários

Popular Posts

Criando arquivos de log com Log4J

Monitorando o Tomcat com Java VisualVM

Gerenciamento de Transações com EJB - Parte 2

Injeção de dependências em Java EE usando @Inject, @EJB e @Resource ?

AngularJS - Formatando Datas com o Filter Date

JBoss AS 7 - Instalação e Configuração

Métodos Utilitários da Classe String

Configurando o arquivo application.properties do SpringBoot

Criando Módulos e DataSources no Wildfly

Criando um Projeto com Spring Boot