目前,我有一个Web应用程序,在战争中使用eclipse导出它,在服务器上使用scp手动复制,运行提取战争的脚本,使用本地配置文件覆盖战争中的那些,以及副本tomcat / webapps中提取的文件夹。对于一两台服务器来说这听起来很容易,但对于100个服务器来说却不容易。
如何更好地控制所安装的版本/配置并更轻松地进行部署?
答案 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文件是我唯一的外部文件。其余配置是通过数据库完成的。
主要优点是可以在测试和生产以及100台服务器中的任何一台上部署相同的工件。我目前在Tomcat上使用它,但env变量应该可以在其他应用服务器中使用。
2)从IDE构建更改为构建工具。我选择了maven,但你可以使用ant / whatever。 为此,我发现以下来源很有用:
为此,我还需要安装Nexus作为镜像存储库。
3)安装像Jenkins / Hudson这样的持续集成工具。它是一个很棒的工具,但由于它的复杂性,它需要时间来配置它并增加它的功能。我目前正在阅读Jenkins: Definitive Guide,我正在努力获得以下功能:
在此之前,将通过bash脚本部署战争。我只是将战争scp到服务器(没有爆炸/复温)。