Liberação do Maven para o Nexus

Liberação do Maven para o Nexus

1. Visão geral

No artigo anterior desta série, configuramos umdeployment process with Maven to Nexus. Neste artigo, vamos configurar oRelease Process with Maven - tanto nopom do projeto, bem como em um trabalho do Jenkins.

2. Repositório empom

Para que o Maven seja capaz de liberar para um Nexus Repository Server, precisamosdefine the repository informações por meio do elementodistributionManagement:


   
      nexus-releases
      http://localhost:8081/nexus/content/repositories/releases
   

O Repositório de Liberações hospedado sai da caixa no Nexus, portanto, não há necessidade de criá-lo explicitamente.

3. SCM no Mavenpom

O processo de liberação irá interagir com o controle de origem do projeto - isso significa que primeiro precisamos definir o elemento<scm> em nossopom.xml:


   scm:git:https://github.com/user/project.git
   http://github.com/user/project
   scm:git:https://github.com/user/project.git

Ou, usando o protocolo git:


   scm:git:[email protected]:user/project.git
   scm:git:[email protected]:user/project.git
   scm:git:[email protected]:user/project.git

4. O Plugin de Lançamento

O plugin Maven padrão usado por um processo de lançamento é omaven-release-plugin - a configuração para este plugin é mínima:


   org.apache.maven.plugins
   maven-release-plugin
   2.4.2
   
      [email protected]{project.version}
      true
      releases
   

O que é importante aqui é que a configuraçãoreleaseProfiles realmente forçará um perfil Maven - o perfilreleases - a se tornar ativo durante o processo de lançamento.

É neste processo quenexus-staging-maven-plugin é usado para realizar uma implantação no repositório Nexusnexus-releases:


   
      releases
      
         
            
               org.sonatype.plugins
               nexus-staging-maven-plugin
               1.5.1
               
                  
                     default-deploy
                     deploy
                     
                        deploy
                     
                  
               
               
                  nexus-releases
                  http://localhost:8081/nexus/
                  true
               
            
         
      
   

O plugin está configurado para realizar o processo de liberaçãowithout the staging mechanism, igual apreviously, para o processo de implantação (skipStaging=true).

E também semelhante ao processo de implantação,Releasing to Nexus is a secured operation - então usaremos o formulário de usuário Out of the Boxdeployment Nexus novamente.

Também precisamos configurar as credenciais para o servidornexus-releases no globalsettings.xml (%USER_HOME%/.m2/settings.xml):


   
      nexus-releases
      deployment
      the_pass_for_the_deployment_user
   

Esta é a configuração completa

5. O Processo de Liberação

Vamos dividir o processo de liberação em etapas pequenas e focadas. Estamos realizando um Release quando a versão atual do projeto é uma versão SNAPSHOT - digamos0.1-SNAPSHOT.

5.1. Lançamento: Limpo

Cleaning a Release irá:

  • exclua o descritor de lançamento (release.properties)

  • exclua todos os arquivos POM de backup

5.2. release: prepare

A próxima parte do processo de liberação éPreparing the Release; Isso vai:

  • executar algumas verificações - não deve haver alterações não confirmadas e o projeto deve depender de nenhuma dependência do INSTANTÂNEO

  • alterar a versão do projeto no arquivo pom para um número de versão completo (remover o sufixo SNAPSHOT) - em nosso exemplo -0.1

  • execute o projetotest suites

  • comprometer e empurrar as mudanças

  • crie otag a partir deste código versionado sem SNAPSHOT

  • increase the version do projeto no pom - em nosso exemplo -0.2-SNAPSHOT

  • comprometer e empurrar as mudanças

5.3. release: execute

A última parte do processo de liberação éPerforming the Release; Isso vai:

  • tag de liberação do checkout do SCM

  • construir e implantar código liberado

Esta segunda etapa do processo depende da saída da etapa Prepare - orelease.properties.

6. No Jenkins

O Jenkins pode realizar o processo de lançamento de uma das duas maneiras - ele pode usar seus próprios plug-ins de lançamento ou pode simplesmente executar executar o lançamento com um trabalho maven padrão executando as etapas de lançamento corretas.

Os plugins Jenkins existentes focados no processo de lançamento são:

No entanto, como o comando Maven para executar a liberação é bastante simples, podemos simplesmente definir um trabalho Jenkins padrão para executar a operação - sem necessidade de plugins.

Portanto, para um novo trabalho do Jenkins (construir um projeto maven2 / 3) - definiremos 2 parâmetros String:releaseVersion=0.1edevelopmentVersion=0.2-SNAPSHOT.

Na seção de configuraçãoBuild, podemos simplesmente configurar o seguinte comando Maven para execução:

Release:Clean release:prepare release:perform
   -DreleaseVersion=${releaseVersion} -DdevelopmentVersion=${developmentVersion}

Ao executar um trabalho parametrizado, o Jenkins solicitará que o usuário especifique valores para esses parâmetros - portanto, cada vez que executarmos o trabalho, precisamos preencher os valores corretos parareleaseVersionedevelopmentVersion.

Além disso, vale a pena usarWorkspace Cleanup Plugin e verificar a opçãoDelete workspace before build starts para esta construção. No entanto, tenha em mente que a etapaperform do Release deve necessariamente ser executada pelo mesmo comando que a etapapreparestep - isso porque a última etapaperform usará orelease.properties arquivo criado porprepare. Isso significa que não podemos ter um Jenkins Job em execuçãopreparee outroperform em execução.

7. Conclusão

Este artigo mostrou como implementar o processo deReleasing a Maven project com ou sem Jenkins. Semelhante ato Deployment, este processo está usandonexus-staging-maven-plugin para interagir com o Nexus e se concentra em um projeto git.