适用于多个Java Web应用程序的自动部署解决方案
我正在寻找可以管理多个相互依赖的Java Web应用程序部署的解决方案,最好是开源。
该解决方案需要能够创建和存储包含多个项目的发布规范,以用于每个应用程序的特定版本以及相关的其他工件(数据库配置,apache配置等)。
然后需要解析规范,然后需要在目标环境中部署/执行每个项目。 目标环境是基于linux的。 Web应用程序是在j2ee标准应用服务器上运行的香草战争。
要问很多?
目前我认为所有的位都已到位 – 二进制工件随maven发布插件一起发布 ,因此可以从我们的maven repo中进行部署, 数据库使用dbdeploy进行版本化, apache配置在svn中进行版本控制。 但是,我不知道任何可以将所有这些步骤放在多个应用程序上的工具。
我目前首选的方法是使用hudson的参数化构建forms来创建规范。 然后是第二个参数化构建,以选择预先创建的规范并在选定的环境中部署/执行它。
然而,这似乎是很多工作和不太理想的自定义解决方案。
任何人都知道任何预建的更好的想法吗? 或建议如何处理这个 – 也许工作流引擎会比哈德森更好? 也许是自定义网络应用程序
笔记:
目标环境预先构建了所有需求 – 例如安装了Java和app服务器,运行数据库等。这不是环境配置问题,而是更多的部署问题。
自动部署单个应用程序是许多解决方案的问题,例如货物,ant部署脚本等。但是我需要能够包装多个部署的东西。 例如,在多个应用程序的特定版本及其要求下启动货物。
听起来你需要一个厨师来烹饪你的配置:)
glu似乎是自动化部署的一个非常好的选择。 其网站描述:
什么是glu?
glu是一个免费/开源的部署和监控自动化平台。
glu解决了什么问题?
glu正在解决以下问题:
- 将应用程序部署(和监视)到任意大型节点集:
- 有效率的
- 最少/没有人为干预
- 安全
- 以可重复的方式
- 确保一段时间内的一致性(防止漂移)
- 出现问题时快速检测并排除故障
它是如何工作的?
glu采用一种非常具有说服力的方法,在其中描述/建模你想要的东西,然后glu可以:
- 计算部署/升级应用程序的操作集
- 确保它随着时间的推移保持一致
- 在发生不匹配时检测并提醒您
它由Yan Pujante维护,起源于内部使用它的LinkedIn。
由于这个旧线程首先在谷歌搜索上出现,我想添加一个新的替代方案:
Ansible通过SSH执行命令,并且很容易设置和使用。 只需几个小时即可理解概念并开始编写自己的任务。
网站摘录:
除了不需要任何守护进程或引导之外,Ansible的Playbook语言是最简单的系统管理语言。 它读起来像英语。 我们相信您还有其他工作要做,因此我们希望您能够快速完成工作并避开您的工作。
查看ControlTier ,这是一个基于配置管理数据库(CMDB)存储库的开源部署工具, 旨在成为一个完整的企业级系统,用于自动部署和管理多层和分布式应用程序服务 。 根据其网站 :
ControlTier是一个社区驱动的跨平台软件系统,用于协调跨多个节点和应用程序层的应用程序服务管理活动。 该项目是完全开源的,许多项目贡献来自DTO Solutions正在进行的大规模电子商务,软件即服务和金融服务运营的咨询工作。 转到安装以获取并安装该软件。
alt text http://sofzh.miximages.com/java/ControlTier_HighLevel.png
Smart Frog也值得一看。
部署是一项复杂的业务。 Maven拥有管理部署所需的许多插件,但需要一些配置才能使其完全符合您的要求。 以下描述了如何解决您的每个问题。 虽然取决于您的环境,但它可能比它的价值更麻烦。
maven Cargo插件可用于部署应用程序。 显然,这可能非常复杂,但Cargo是管理部署的一个非常好的工具。
apache配置可以由构建过程打包为单独的jar并部署到存储库,然后下载/发布以在部署jar中使用( 依赖插件可用于从存储库中提取配置jar)。 或者,Maven有一个scm api,可用于对SCM存储库调用任意命令(请参阅此答案,了解使用SCM API的示例插件)。
据我所知,dbdeploy没有Maven插件,但是这篇博文显示了如何使用maven-antrun-plugin来编写部署脚本。
我的要求非常相似。 专注于应用程序部署而非环境部署,似乎http://www.kwatee.net/product非常适合!
- 用于创建/配置和控制部署的Web界面
- 多平台部署支持
- 版本管理,增量更新部署
- 必要时使用plan shell命令
- 轻巧易用,易于理解和管理
我的建议是使用一系列工具(关注点分离,正确问题的正确工具)来帮助您实现目标,让我提一下我曾经使用的一些工具:
- SVN或Git(SCM)
- Maven(软件项目管理和综合工具)
- Jenkins(创建/触发您的CI和CD过程)
- Artifactory插件: https : //wiki.jenkins-ci.org/display/JENKINS/Artifactory+Plugin (将您的工件提升为Artifactory并能够发布工件[ https://wiki.jenkins-ci.org/display / JENKINS / Jenkins + Artifactory + Plugin + – + Release + Management] )
- Rundeck插件: https ://wiki.jenkins-ci.org/display/JENKINS/RunDeck+Plugin(将Jenkins与Rundeck集成)
- 构建管道插件: https : //wiki.jenkins-ci.org/display/JENKINS/Build+Pipeline+Plugin (创建交付管道)
- Artifactory http://www.jfrog.com/open-source/ (存储您的工件的SNAPSHOT和RELEASES)
- Rundeck http://rundeck.org/ (在自助服务工作中改变您的操作程序)
除了上面提到的工具之外,还有其他一些可以提供帮助的工具,您可以根据项目需要使用它们: http : //www.oracle.com/technetwork/articles/java/deployment-tools-2227133.html
现在谈论这个问题。 我注意到的第一件事是你提到你已经在你的存储库管理器中有你的发布工件(比如Artifactory),所以我们需要做的下一步是同时协调这些工件的部署,我认为一个选项是使用Paremeterized Build( https://wiki.jenkins-ci.org/display/JENKINS/Parameterized+Build ,您需要在其中定义多个参数,这些参数将包含您想要的工件的不同版本部署,一旦用户填写这些值,我们将使用它们作为参数传递给rundeck作业(rundeck是一个帮助您在不同节点中协调任务的工具),此rundeck部署主作业将接收参数并将协调runurck作业将包含的步骤的一些示例包括:停止容器,备份当前组件,启动容器,从存储库管理器下载工件,创建资源i 在您的Container中,在容器中部署组件,执行数据库部署,在进程失败时发送电子邮件等等。通常每个步骤都是子作业(也接收参数),最后我们创建一个使用/编排所有这些子作业的主作业。
让我添加一些此类CD过程的图像示例。 此示例仅部署War / Ear工件,但它可以帮助您查看大图:
https://drive.google.com/folderview?id=0B-FVAopZZjDWdGl0WlNjX1RnRDQ&usp=sharing
我希望这会有所帮助。
看起来像Apache Ace将使用像Aries这样的其他工具解决您的问题。 ACE跟踪依赖关系。 您可以整理您的function并形成分发。 然后,您可以选择需要部署分发的目标。 它还提供RESTful API。
Apache ACE
Apache ACE是一个软件分发框架,允许您集中管理软件组件,配置数据和其他工件并将其分发到目标系统。 它使用OSGi构建,可以部署在不同的拓扑中。 目标系统通常也是基于OSGi的,但并非必须如此。