1.概述
在本系列的上一篇文章中,我们将Maven设置为Nexus的部署过程 。 在本文中,我们将在项目的pom以及Jenkins作业中使用Maven配置发布过程 。
2.
为了使Maven能够发布到Nexus Repository Server,我们需要通过distributionManagement元素定义存储库信息:
<distributionManagement><repository><id>nexus-releases</id><url>http://localhost:8081/nexus/content/repositories/releases</url></repository>
</distributionManagement>
托管的Release Repository在Nexus上是开箱即用的,因此无需显式创建它。
3. Maven
发布过程将与项目的源代码管理进行交互–这意味着我们首先需要在pom.xml中定义<scm>元素:
<scm><connection>scm:git:https://github.com/user/project.git</connection><url>http://github.com/user/project</url><developerConnection>scm:git:https://github.com/user/project.git</developerConnection>
</scm>
或者,使用git协议:
<scm><connection>scm:git:git@github.com:user/project.git</connection><url>scm:git:git@github.com:user/project.git</url><developerConnection>scm:git:git@github.com:user/project.git</developerConnection>
</scm>
4.发布插件
发布流程使用的标准Maven插件是maven-release-plugin-此插件的配置最少:
<plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-release-plugin</artifactId><version>2.4.1</version><configuration><tagNameFormat>v@{project.version}</tagNameFormat><autoVersionSubmodules>true</autoVersionSubmodules><releaseProfiles>releases</releaseProfiles></configuration>
</plugin>
这里重要的是,releaseProfiles配置实际上将强制Maven的轮廓-在释放配置文件-在释放过程变得活跃。
在此过程中,使用nexus-staging-maven-plugin进行部署到nexus-releases Nexus存储库:
<profiles><profile><id>releases</id><build><plugins><plugin><groupId>org.sonatype.plugins</groupId><artifactId>nexus-staging-maven-plugin</artifactId><version>1.4.4</version><executions><execution><id>default-deploy</id><phase>deploy</phase><goals><goal>deploy</goal></goals></execution></executions><configuration><serverId>nexus-releases</serverId><nexusUrl>http://localhost:8081/nexus/</nexusUrl><skipStaging>true</skipStaging></configuration></plugin></plugins></build></profile>
</profiles>
该插件被配置为在没有部署机制的情况下执行与之前相同的Release流程,用于Deployment流程( skipStaging = true )。
而且与部署过程类似,“ 释放到Nexus”是一项安全的操作 -因此,我们将再次使用Nexus的“开箱即用” 部署用户。
我们还需要在全局settings.xml ( %USER_HOME%/。m2 / settings.xml )中为nexus-releases服务器配置凭据:
<servers><server><id>nexus-releases</id><username>deployment</username><password>the_pass_for_the_deployment_user</password></server>
</servers>
这是完整的配置
5.发布过程
让我们将发布过程分为几个小步骤和重点突出的步骤。 当项目的当前版本为SNAPSHOT版本(例如0.1-SNAPSHOT)时,我们正在执行发布。
5.1。 释放:干净
清洁发行版将:
- 删除发布描述符( release.properties )
- 删除所有备份POM文件
5.2。 发布:准备
发布过程的下一部分是准备发布 ; 这将:
- 执行一些检查–不应有未提交的更改,项目应不依赖于SNAPSHOT依赖项
- 将pom文件中的项目版本更改为完整发行版号(删除SNAPSHOT后缀)–在我们的示例中– 0.1
- 运行项目测试套件
- 提交并推送更改
- 根据此非SNAPSHOT版本代码创建标签
- 在pom中增加项目的版本 -在我们的示例中-0.2-SNAPSHOT
- 提交并推送更改
5.3。 发布:执行
发布过程的后半部分是执行发布 ; 这将:
- 来自SCM的结帐发布标签
- 构建和部署发布的代码
该过程的第二步取决于Prepare步骤的输出– release.properties 。
6.关于詹金斯
Jenkins可以通过以下两种方式之一执行发布过程-它可以使用其自己的发布插件,也可以仅使用标准的maven作业运行正确的发布步骤来执行发布。
专注于发布过程的现有Jenkins插件为:
- 发布插件
- M2发布插件
但是,由于执行发布的Maven命令非常简单,因此我们只需定义一个标准的Jenkins作业即可执行该操作-无需插件。
因此,对于一个新的Jenkins作业(构建一个maven2 / 3项目)–我们将定义2个String参数: releaseVersion = 0.1和developmentVersion = 0.2-SNAPSHOT 。
在“ 构建配置”部分,我们只需配置以下Maven命令即可运行:
release:clean release:prepare release:perform -DreleaseVersion=${releaseVersion} -DdevelopmentVersion=${developmentVersion}
运行参数化作业时,Jenkins将提示用户为这些参数指定值-因此,每次运行作业时,我们都需要为releaseVersion和developmentVersion填写正确的值。
另外,值得使用Workspace Cleanup插件并选中此构建的“ 在构建开始之前删除工作区”选项。 但是请记住,发行版的执行步骤必须由与prepare相同的命令运行 步骤–这是因为后面的执行步骤将使用prepare准备创建的release.properties文件。 这意味着我们不能让Jenkins Job运行准备和另一个运行的Perform 。
7.结论
本文介绍了如何在有或没有Jenkins的情况下发布Maven项目的过程。 与Deployment类似,此过程使用nexus-staging-maven-plugin与Nexus进行交互,并专注于git项目。
翻译自: https://www.javacodegeeks.com/2013/05/maven-release-to-nexus.html