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.