代码之家  ›  专栏  ›  技术社区  ›  Rorick

如何改进我们的构建和部署过程?

  •  5
  • Rorick  · 技术社区  · 14 年前

    我们的构建/部署过程非常繁琐,足够手动,并且容易出错。你能提出改进建议吗?

    所以让我描述一下我们的部署策略和构建过程。 我们正在开发名为应用服务器的系统(简称为ApplicationServer)。它本质上是基于servlet的Web应用程序,托管在JBossWeb服务器上。可以安装在两个“环境”中。每个环境都是一个包含webapp代码的目录。这个目录放在网络存储上。存储被安装到几个安装了JBoss实例的生产服务器上。目录链接到jboss' webapps 目录。因此,所有JBoss实例对环境都使用相同的代码。jboss的配置独立于环境,并根据每个实例进行更新。

    所以我们有两种类型的补丁:webapp补丁(针对不同的环境)和配置补丁(针对每个实例配置)

    修补程序是一个可执行文件。实际上,它是带有嵌入式二进制RPM包的bash脚本。安装非常直接:您只需执行文件并选择回答一些问题。重要的一点是,补丁不是一个整体系统,它只包含一些带有修正和/或修改配置文件的脚本的类。类被复制到WEB-INF/类中(被部署为分解目录)。

    我们构建这些路径的方式是:

    1. 我们把以前的补丁文件复制下来。
    2. 我们修改补丁的内容。它最重要的部分是RPM规范。在这里,我们更改补丁的名称,更改其必备的RPM包,并写下用于备份、复制和修改文件的实际bash命令。这是最烦人的部分之一,因为我们并不总能得到实际的变更集。这对于跨越多个变更请求和提交的新的复杂特性尤其如此。此外,为变更集编写这些命令是繁琐且容易出错的。
    3. 对于webapp补丁,我们还修改了其他环境的规范。通常它们是相同的,除了RPM包名。
    4. 我们把所有与RPM相关的文件放到VCS上
    5. 我们通过添加几个目标来修改build.xml来构建新补丁。修改是通过复制粘贴和编辑来完成的。
    6. 我们通过复制粘贴项目和更改其中的Ant目标来修改CruiseControl的配置。
    7. 最后,我们建立了一个系统

    此外,我还感兴趣的是关于补丁准备和部署实践的参考,最好是Java应用程序。我在谷歌上没成功。

    2 回复  |  直到 14 年前
        1
  •  6
  •   O. Jones    14 年前

    我工作的地方也有类似的问题,但也许没有那么复杂。

    我们的反应是完全消除了补丁的概念。我们停止了修补,开始简单地安装整个应用程序(即使我们只做了一个小改动)。

    现在,我们有了巡航控制构建完整的安装工具包,恰好在安装工具包名称中包含构建时间戳。这是一个巡航控制构建工件。

    巡航控制自动将它们安装在测试服务器上,并运行一些自动烟雾测试。然后我们在测试服务器上运行手动测试。然后我们将工件安装到一个临时服务器上,然后安装到生产服务器上。

    摆脱修补导致一些人语无伦次,“如果你只是改变一些事情,那不是浪费吗?”“为什么要覆盖所有的软件来修补某些东西?”

    但事实是,良好的源代码控制、自动安装工具包构建和一步安装为我们节省了大量时间。安装确实需要几秒钟的时间,但我们可以更重复地安装,而且开发人员的工作量也更少。

        2
  •  0
  •   Community ahmed    7 年前

    我们还试图向补丁/修补程序版本以及基于RPM的完整安装包的发布迈进。

    我必须说,我也同意,在大多数情况下,这项工作是一种浪费,我也会发布完整的安装包,假设您已经建立了一个构建管道。

    在我们的案例中,我们有一个多模块交付,每个模块包装成一个RPM,并包装成一个ISO进行交付。我们的目标是保持构建管道基本不变,以释放修补程序。因此,我们将重点放在使我们的RPM更细粒度(更小-更具针对性的RPM)上,这样我们就只能发布那些包含特定修补程序/补丁的已更改工件的RPM。

    这样,完全发布的RPM和补丁版RPM是相同的,唯一的区别是您在交付ISO中打包的RPM的数量。

    我还有一个问题要解决这个问题,你可以看看:

    hotfix-patch-build-delivery-approach