同一战争的多种配置

时间:2012-02-09 15:30:08

标签: java deployment war

目前,我有一个Web应用程序,在战争中使用eclipse导出它,在服务器上使用scp手动复制,运行提取战争的脚本,使用本地配置文件覆盖战争中的那些,以及副本tomcat / webapps中提取的文件夹。对于一两台服务器来说这听起来很容易,但对于100个服务器来说却不容易。

如何更好地控制所安装的版本/配置并更轻松地进行部署?

5 个答案:

答案 0 :(得分:3)

使用Cruise Control或Hudson为您进行连续构建可以真正受益。在那里你可以拥有战争中内置的战争本地配置。你可以构建这些的许多风格。然后,要进行部署,只需将正确的战争推向合法的地方即可。没有爆炸,需要驯化。

答案 1 :(得分:3)

使用Kwatee Agile Deployment查看Deploy web application on multiple tomcat servers。使用Web界面配置部署参数后,可以使用kwatee任务从Ant触发,也可以使用python CLI工具从持续集成工具触发。

答案 2 :(得分:1)

为了帮助管理这些多个配置,我编写了一个非常轻量级的库,名为xboxng here

它灵活且易于使用(不需要JNDI)。

答案 3 :(得分:0)

将每个服务器的特定配置文件存储在一个目录中,将它们置于版本控制之下,并使用Ant之类的东西进行“裸”战争,解压缩,用以下配置文件替换文件您要部署到的服务器,并重建战争。

然后直接将战争scp到服务器。这也可以使用ant。

完成
configs
  - server1
     - file1.properties
     - file2.xml
  - server2
     - file1.properties
     - file2.xml

ant -Dserver=server2 war deploy

答案 4 :(得分:0)

由于这不是一个单一的答案问题,取决于项目,为什么不是个人品味,我会发布一些我认为可以帮助整个管理/部署过程的步骤。

这并不意味着其他海报提供的解决方案是错误的(其中一些海报收到了我的upvote),但我发现这对我来说效果更好。

1)为了只有一个版本的战争有多个配置,我使用了JNDI。我设置了一个env变量到我可以找到配置的路径。这已添加到web.xml:

<env-entry>
<description>path to configuration files</description>
<env-entry-name>appName/pathToConfigFiles</env-entry-name>
<env-entry-type>java.lang.String</env-entry-type>
<env-entry-value>/configFolder/appName/</env-entry-value>
</env-entry>

当配置文件来自战争时,它有一个默认值,但可以被context.xml覆盖。

<Environment name="appName/pathToConfigFiles" 
    type="java.lang.String" value="/etc/.."/>

这样,如果有人需要例如更改数据库连接参数,我将不必部署新的战争。管理员可以更改配置文件夹中的文件。 db配置文件和log4j文件是我唯一的外部文件。其余配置是通过数据库完成的。

主要优点是可以在测试和生产以及1​​00台服务器中的任何一台上部署相同的工件。我目前在Tomcat上使用它,但env变量应该可以在其他应用服务器中使用。

2)从IDE构建更改为构建工具。我选择了maven,但你可以使用ant / whatever。 为此,我发现以下来源很有用:

为此,我还需要安装Nexus作为镜像存储库。

3)安装像Jenkins / Hudson这样的持续集成工具。它是一个很棒的工具,但由于它的复杂性,它需要时间来配置它并增加它的功能。我目前正在阅读Jenkins: Definitive Guide,我正在努力获得以下功能:

  • 自动构建服务器
  • 自动化junit测试服务器
  • 添加指标
  • 自动化测试环境部署和验收测试
  • 持续部署

在此之前,将通过bash脚本部署战争。我只是将战争scp到服务器(没有爆炸/复温)。