我们的构建系统非常稳定,由 Maven 和 Nexus 和 Jenkins 的 CI 组成。只要我们在开发(使用 SNAPSHOT),一切都很好,但发布总是需要很长时间。
这就是为什么我想知道你们是如何进行发布的……尤其是在持续部署即将到来的情况下。
我们的构建系统
我们有三个分层的父 POM:
- 定义插件及其配置的“构建”父级。
- “外部版本”父级,它定义了外部工件及其版本,以使它们处于控制之下。
- “内部版本”父级,它定义了我们自己的工件及其版本。
然后我们有通常的实用程序项目,其他基础项目等。它们在开发过程中用作 SNAPSHOT 依赖项。
我们的发布
当发布的时候,项目的首席开发人员在 SCM 中创建一个分支,并切换到 SCM 头上的下一个 SNAPSHOT。
然后,构建团队继续在所有这些分支上工作,以发布 POM 和项目。
基本上,我们必须分层发布,以确保使用发布的组件。这意味着我们首先发布三个父 POM,然后开始自下而上:发布实用程序项目,然后是使用实用程序项目的基础项目,然后是同时使用实用程序和基础项目的其他项目,依此类推。
这是一个我们必须手工完成的过程。据我所知,没有任何工具可以自动执行此操作,对吧?
为了在项目发布后更新“内部版本”POM,使用版本插件(救命稻草!)自动更新该 POM。这意味着:将项目发布到 Nexus,然后确保所有其他正在发布的项目现在都使用该发布版本。
最后,当每个项目都发布并可以在 Nexus 中找到时,我们构建 EAR 以使用这些发布的工件进行部署,并将 EAR 交给操作人员。
总而言之,每次发布都需要大约一天的时间,这似乎浪费了很多时间。此外,我们混合了普通的 Maven、shell 脚本(使用我们的构建实用程序类和 Maven)和 Jenkins 作为 UI(发布插件)。
这就是为什么我要问你:我们可以做的更好更快?你如何发布你的软件?