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:
O versionamento é uma forma de atrelar um conjunto de requisitos, com um nome ou uma numeração, por exemplo:
Gerenciadores de Repositórios
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.
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:
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:
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. |
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
Postar um comentário