5

我希望在 Jenkins 中设置发布工作。我们使用 Jenkins、Maven 3 和 Perforce 进行源代码控制,使用 Nexus 进行存储库管理。

我已经使用 maven 目标 release:prepare 和 release:perform 设置了作业,但是我注意到构建时间加倍,因为编译和测试都发生了两次。我目前对 maven-release-plugin prepare 和 perform 目标的理解如下:

maven-release-plugin 准备:

  1. 确保不对工作区中的文件进行本地修改
  2. 编辑 POM 以设置发布版本
  3. 执行默认为clean verify确保代码可以编译并通过测试的preparationGoals。
  4. 提交修改后的 POM
  5. 创建 VCS 标记
  6. 将 POM 的版本增加到下一个开发版本,并将这些 POM 提交给 VCS

此外,还创建了一个带有 VCS 标记以及发布和开发版本信息的 release.properties 文件

maven-release-plugin 执行

  1. 使用来自 release.properties 的 VCS 标记将源代码的新副本检出到默认位置 target/checkout
  2. 根据项目是否有distributionManagement执行deploy/的目标deploy-site

因此,为了停止将构建时间加倍并保持构建完整性,我正在考虑执行以下操作:

  1. 让 jenkins 签出源存储库中最新源代码的新副本
  2. 配置 release 插件的 preparesGoals 配置元素clean deploy
  3. 赶紧跑release:prepare

有了以上内容,我认为我可以将两者 (prepareperform) 合并为一个步骤并节省构建周转时间。我们通常总是使用一个构建环境来构建一个堆栈(Java 6 等),因此只要代码在准备步骤中成功编译并通过测试,那么将工件部署到 Nexus 就可以了。

我主要是在寻找上述可能出错的相反想法,以便我可以从我的眼睛看不见的东西中拯救出来。

谢谢

4

1 回答 1

1

这是一个专家问题,而不是詹金斯问题。

在 Maven 中,准备和执行操作做了两件不同的事情。一个在快照上运行,另一个在您发布的标记版本中运行。一个部署到您的快照存储库,另一个部署到您的发布存储库。一个创建您的下一个快照版本,一个创建您当前的版本。

它们服务于不同的目的。根据您的 Maven 和存储库配置,两者都可能以自己的方式失败。因此需要同时运行它们。

于 2013-09-05T09:41:49.673 回答