【问题标题】:Automated Deployment solution for multiple Java web-apps多个 Java Web 应用程序的自动化部署解决方案
【发布时间】:2010-11-30 13:05:11
【问题描述】:

我正在寻找可以管理多个相互依赖的 java web 应用程序部署的解决方案,最好是开源的。

该解决方案需要能够创建和存储包含多个发布项目的发布规范 - 每个应用程序的特定版本和相关的其他工件(数据库配置、apache 配置等)。

然后需要解析规范,然后需要在目标环境中部署/执行每个项目。目标环境是基于linux的。 Web 应用程序是在 j2ee 标准应用程序服务器上运行的原版战争。

要问很多吗?

目前我认为所有部分都已准备就绪 - 二进制工件是使用 ma​​ven 发布插件 发布的,因此可以从我们的 ma​​ven 存储库 进行部署,database 使用 dbdeploy 进行版本控制,apache config 使用 svn 进行版本控制。但是我不知道有任何工具可以将所有这些步骤放在多个应用程序上。

我目前首选的方法是使用一种形式的参数化构建供 hudson 创建规范。然后是第二个参数化构建,以选择预先创建的规范并在选定的环境中部署/执行它。

但是,这似乎需要做很多工作,而且不是最佳的自定义解决方案。

有人知道任何预先构建的更好的想法吗?或有关如何解决此问题的建议-也许工作流引擎会比哈德逊更好?也许是自定义网络应用?

注意事项:

目标环境已预先构建并满足所有要求 - 例如java和应用服务器安装,数据库运行等。这不是环境配置问题,而是部署问题。

单个应用程序的自动化部署是许多解决方案的问题,例如cargo,ant 部署脚本等。但是我需要一些可以包装多个部署的东西。例如。启动多个应用程序的特定版本及其要求的货物。

【问题讨论】:

  • 您的目标部署环境是什么?多个不同的操作系统还是只有一个?多种应用服务器类型还是只有一种?
  • 单一应用服务器类型,linux操作系统。

标签: java deployment web-applications configuration maven-2


【解决方案1】:

听起来你需要一个chef 来处理你的配置:)

【讨论】:

    【解决方案2】:

    glu 似乎是自动化部署的一个很好的选择。 来自其网站的描述:

    什么是glu?

    glu 是一个免费/开源的部署和监控自动化平台。

    glu 解决了什么问题?

    glu 正在解决以下问题:

    • 将应用程序部署(和监控)到任意大型节点集:
      • 高效
      • 最少/没有人机交互
      • 安全
      • 以可重现的方式
    • 确保随着时间的推移保持一致性(防止漂移)
    • 出现问题时快速检测和排除故障

    它是如何工作的?

    glu 采用了一种非常声明性的方法,您可以在其中描述/建模您想要的东西, 然后 glu 可以:

    • 计算一组操作以部署/升级您的应用程序
    • 确保它随着时间的推移保持一致
    • 在出现不匹配时检测并提醒您

    它由 Yan Pujante 维护,起源于 LinkedIn,它在内部使用它。

    【讨论】:

      【解决方案3】:

      由于这个旧线程首先出现在谷歌搜索中,我想添加一个新的替代方案:

      Ansible 通过 SSH 执行命令,设置和使用非常简单。只需几个小时即可理解这些概念并开始编写自己的任务。

      网站摘录:

      除了不需要任何守护程序或引导程序之外,Ansible 的 Playbook 语言是目前最简单的系统管理语言。它读起来像英语。我们相信您还有其他工作要做,因此我们希望您能快速完成工作,不要碍事。

      【讨论】:

      【解决方案4】:

      查看ControlTier,这是一个基于配置管理数据库 (CMDB) 存储库的开源部署工具,旨在成为一个完整的企业就绪系统,用于自动部署和管理多层和分布式应用服务。根据其website

      ControlTier 是一个社区驱动的跨平台软件系统,用于协调跨多个节点和应用层的应用服务管理活动。该项目是完全开源的,许多项目贡献来自 DTO Solutions 正在进行的大规模电子商务、软件即服务和金融服务运营的咨询工作。前往Installation 获取并安装软件。

      alt text http://controltier.org/mediawiki/images/d/d2/ControlTier_HighLevel.png

      【讨论】:

      • 为什么 Pascal Thivent 总是有完全正确的答案?我开始认为他是世上最聪明的人。 ControlTier 是此过程的绝佳选择。虽然我认为你可以拼凑一些 Mavenish 来进行这种部署,但我不喜欢推动 Maven 做这种工作。
      • 网站现在位于 controltier.org。
      • 根据该网站:“ControlTier 项目是一个休眠项目(最后一个版本是 2011-September-24)”。显然它推荐RunDeck
      【解决方案5】:

      Smart Frog也值得一看。

      【讨论】:

      • 更新:Smart Frog 似乎处于非活动状态,最后一次发布是在 2011 年底。
      【解决方案6】:

      部署是一项复杂的业务。 Maven 有许多管理部署可能需要的插件,但需要一些配置才能让它完全按照您的意愿行事。 以下描述了如何解决您的每个问题。虽然取决于您的环境,但它可能比它的价值更麻烦。

      maven Cargo plugin 可用于部署应用程序。显然,这可能涉及很多,但 Cargo 是一个非常好的管理部署的工具。

      apache 配置可以由您的构建过程打包为单独的 jar 并部署到存储库,然后下载/发布以在您的部署 jar 中使用(dependency plugin 可用于从存储库中提取配置 jar) .或者,Maven 有一个 scm api,可用于针对您的 SCM 存储库调用任意命令(有关使用 SCM API 的示例插件,请参阅this answer

      据我所知,没有用于 dbdeploy 的 Maven 插件,但这个 blog post 显示了如何使用 maven-antrun-plugin 编写部署脚本。

      【讨论】:

      • 使用 cargo 等自动部署单个应用程序相对容易。但是我需要一些可以包装多个部署的东西。例如。在多个应用的​​特定版本上启动货物
      【解决方案7】:

      我有非常相似的要求。专注于应用程序部署而不是环境部署,似乎http://www.kwatee.net/product 非常适合!

      • 用于创建/配置和控制部署的 Web 界面
      • 多平台部署支持
      • 版本管理、增量更新部署
      • 在需要时使用计划 shell 命令
      • 轻量级且易于使用理解和管理

      【讨论】:

        【解决方案8】:

        我的建议是使用组合工具(关注点分离、针对正确问题的正确工具)来帮助您实现目标,让我提一下我使用过的一些工具:

        除了上面提到的工具之外,还有其他一些有用的,你可以根据你的项目需要使用它们:http://www.oracle.com/technetwork/articles/java/deployment-tools-2227133.html

        现在谈谈这个问题。我注意到的第一件事是您提到您已经在存储库管理器中拥有发布工件(如 Artifactory),因此我们需要做的下一步是同时协调这些工件的部署,我认为一种选择是使用参数化构建(https://wiki.jenkins-ci.org/display/JENKINS/Parameterized+Build,您需要在其中定义多个参数,这些参数将包含您要部署的工件的不同版本,一旦用户填写这些值,我们将使用它们作为传递rundeck 作业的参数(rundeck 是一种帮助您在不同节点中编排任务的工具),此 rundeck 部署主作业将接收参数并将编排您的工件的部署。rundeck 作业将包含的步骤的一些示例是:停止容器、备份当前组件、启动容器、从存储库管理器下载工件、在容器中创建资源、在容器中部署组件iner,执行您的数据库部署,如果进程失败则发送电子邮件等。通常这些步骤中的每一个都是子作业(也接收参数),最后我们创建一个使用/协调所有这些子作业的主作业-工作。

        让我添加一些此类 CD 过程的图像示例。此示例仅部署 War/Ear 工件,但它可以帮助您了解全局:

        https://drive.google.com/folderview?id=0B-FVAopZZjDWdGl0WlNjX1RnRDQ&usp=sharing

        我希望这会有所帮助。

        【讨论】:

          【解决方案9】:

          看起来 Apache Ace 可以使用 Aries 等其他工具解决您的问题。 ACE 跟踪依赖关系。您可以整理您的功能并形成分布。然后,您可以选择需要在其上部署分布的目标。它还提供 RESTful API。

          Apache ACE

          Apache ACE 是一个软件分发框架,可让您集中管理软件组件、配置数据和其他工件并将其分发到目标系统。它是使用 OSGi 构建的,可以部署在不同的拓扑中。目标系统通常也基于 OSGi,但并非必须如此。

          http://ace.apache.org/

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2018-07-06
            • 2012-07-14
            • 1970-01-01
            • 1970-01-01
            • 2011-07-08
            相关资源
            最近更新 更多