如何让Maven发布更快?

时间:2013-06-10 09:54:01

标签: maven jenkins release

我们的构建系统非常稳定,包括Maven和Nexus以及Jenkins for CI。只要我们正在开发(使用SNAPSHOT),一切都很好,但是发布总是需要很长时间。

这就是为什么我想知道你们是如何进行发布的......特别是在即将进行的持续部署中。

我们的构建系统

我们有三个分层父POM:

  • 定义插件及其配置的“build”父级。
  • “外部版本”父级,用于定义外部工件及其版本,以使其受到控制。
  • “内部版本”父级,用于定义我们自己的工件及其版本。

然后我们有通常的实用程序项目,其他基础项目等。它们在开发过程中用作SNAPSHOT依赖项。

我们的发布

当发布时,项目的主要开发人员在SCM中创建一个分支并切换到SCM头上的下一个SNAPSHOT。

然后,构建团队继续处理所有这些分支,以释放POM和项目。

基本上,我们必须按层次结构发布,以确保使用已发布的组件。这意味着我们首先发布三个父POM然后自下而上:发布实用程序项目,然后是基础项目,它使用实用程序项目,然后是其他一些使用实用程序和基础项目的项目等等。

这是我们必须手工完成的过程。据我所知,没有可以自动化的工具,对吗?

为了在项目发布后更新“内部版本”POM,使用Versions Plugin(生命保护程序!)自动更新该POM。这意味着:将项目发布到Nexus,然后确保现在发布的所有其他项目都使用该发布版本。

最后,当每个项目都已发布并且可以在Nexus中找到时,我们构建EAR以使用这些已发布的工件进行部署,并将EAR交给操作人员。

总而言之,每次发布都需要大约一天,这似乎浪费了很多时间。此外,我们混合使用普通Maven,shell脚本(使用我们的构建实用程序类和Maven)和Jenkins作为UI(发布插件)。

这就是我问你的原因:我们可以做得更好更快?你如何发布你的软件?

1 个答案:

答案 0 :(得分:1)

我建议两种选择。首先,考虑在单个Maven构建下将所有内容整合在一起。如果这些模块总是同时发布,那么单独进行版本控制和跟踪它们可能是不值得的。

  

此外,我们混合使用普通Maven,shell脚本

在单个构建下进行此操作需要您将这些shell脚本集成到Maven生命周期中。

或者,如果您的构建足够复杂,请考虑在Maven外部自动化它。您现在拥有的任何步骤都应合并到一个shell脚本中。

  

这是我们必须手工完成的过程。据我所知,没有可以自动化的工具,对吗?

了解项目的脚本可以进行适当的检查和versions:set调用。

在一个自动脚本下将所有内容整合在一起可能会使构建时间缩短到不到一天;如果它仍然那么长,那么你可以看到哪些阶段需要加速以便持续交付。