Uma forma simples de gerenciar a versão de pacotes de seu projeto em CI/CD
Neste artigo falaremos do processo de gerenciamento de versões dentro de um projeto Java utilizando maven. Para esse processo, consideraremos o modelo de versão <MAJOR.MINOR.PATCH>
, onde consideraremos Major como uma release oficial, Minor a correção de bugfix e Patch qualquer implementação ou nova feature que deverá ser testada.
O que usaremos ?
Neste processo, utilizaremos :
Configurações
Primeiro, dentro do arquivo pom.xml
do seu projeto, iremos configurar o plugin maven-release-plugin que será responsável por gerenciar as versões PATCH ( SNAPSHOT ).
Exemplo:
/media/acf968ba7b94fa93c58c030dae15e158
- Obrigatóriamente, teremos que manter a versão do projeto finalizando com -SNAPSHOT
- Dentro da tag
scm
configuraremos o endereço do repositório Git, para que o processo crie uma git-tag do versionamento feito. Também configuraremos que a tag gerada será o mesmo valor que o atributo version do pom, através da anotação@{project.version}
- Dentro ta tag
<build></build>
iremos adicionar o plugin de release. Dentro do mesmo, marcaremos que o formato de tag do repositório será o mesmo padrão da versão do pom e também que nosso processo de geração de versão não verificará se nosso arquivo pom está sem alteração através da marcaçãocheckModificationExcludes
Versão SNAPSHOT
Para esse fluxo, qualquer nova implementação ou nova feature que deverá ser testada e que foi mergeada para a branch master criaremos uma nova versão SNAPSHOT, que ainda não corresponderá a versão release final, apenas uma versão estável para testes e validações.
Para criarmos a primeira versão SNAPSHOT, devemos executar os comandos release:prepare
e release:perform
.
De forma bem resumida, o comando prepare
é responsável por:
- Criar a git-tag com o mesmo número da versão para o repositósio configurado
- Atualizar a versão -SNAPSHOT do POM de 0.1.-SNAPSHOT para 0.1.1-SNAPSHOT
- Testar (equivalente ao
mvn package
oumvn test
) o project com a nova versão atualizada do POM - Efetuar o commit do POM
Já o comando perform
:
- Fará o checkout de da tag correspondente com a versão do POM
- Efetuara o mesmo que o comando
mvn deploy
mvn –batch-mode release:clean release:prepare release:perform -Darguments=”-Dmaven.javadoc.skip=true -Dmaven.test.skipTests=true -Dmaven.test.skip=true” -Dusername=<SEU_USER_GIT> -Dpassword=<SUA_SENHA_GIT>
O argumento --batch-mode
é responsável por executar todo o processo sem apresentar nenhum prompt para inserção de valores, caso você não utilize, o terminal sempre perguntará qual será a proxima versão SNAPSHOT e solicitará o usuário e senha para commitar no repositório git.
Caso você encontre algum problema no preparo de sua release, utilze a opção -Dargumnts=”-Dmaven.javadoc.skip=true -Dmaven.test.skipTests=true -Dmaven.test.skip=true”
para evitara alguns testes.
Versão MAJOR e MINOR
Considerando um fluxo completo com uma release oficial ou uma correção de bugfix, precisaremos alterar as versões MAJOR e MINOR do projeto e para isso, usaremos a dependência Build Helper Maven Plugin para nos auxiliar na gestão das versões dos pacotes.
Para isso, devemso inserir o seguinte trecho em nosso POM para utilização da lib.
<dependencies>
<dependency>
<groupId>org.codehaus.mojo</groupId>
<artifactId>build-helper-maven-plugin</artifactId>
<version>3.2.0</version>
<type>maven-plugin</type>
</dependency>
</dependencies>
Nosso POM final ficará dessa forma:
Agora, para atualizarmos a versão MINOR, executaremosmvn –batch-mode build-helper:parse-version versions:set -DnewVersion=${parsedVersion.majorVersion}.${parsedVersion.nextMinorVersion}.0-SNAPSHOT versions:commit
Esse comando transformará nossa versão de 0.1.0-SNAPSHOT para 0.2.0-SNAPSHOTmvn –batch-mode build-helper:parse-version versions:set -DnewVersion=${parsedVersion.nextMajorVersion}.${parsedVersion.minorVersion}.0-SNAPSHOT versions:commit
Esse comando transformará nossa versão de 0.1.0-SNAPSHOT para 1.1.0-SNAPSHOT
Usaremos sempre o argumento versions:commit
para que o maven sempre commite as alterações do POM. Em seguida, executaremos novamente o comando de prepare
e perform
para que essas alterações sejam inseridas em nosso repositório.mvn –batch-mode release:clean release:prepare release:perform -Darguments=”-Dmaven.javadoc.skip=true -Dmaven.test.skipTests=true -Dmaven.test.skip=true” -Dusername=<SEU_USER_GIT> -Dpassword=<SUA_SENHA_GIT>