我们为Weblogic和Jboss服务器进行了大量的Java Web应用程序部署。部署通常看起来像这样:
将代码和默认配置复制到应用程序服务器或Weblogic管理服务器上的暂存目录。
编辑属性文件以设置特定于环境的变量(IP地址,用户名等)
运行ant以创建ear / war并将其放在相应的目录中。
启动服务
事实证明,这是一个非常不友好的步骤,可以将Puppet用作我们的配置管理工具。我们更喜欢一个与Puppet的Package,File,Service三件式更相似的过程,但是在构建ear / war之前必须配置属性会使这很困难,因为它需要一个额外的步骤来构建战争/耳朵。填充属性后的主机。
有没有办法构建一个与环境无关的战争/耳朵并将配置保持在外部,从而消除额外的构建步骤?
有没有人专门使用过Web应用程序和Puppet,你有什么建议吗?
答案 0 :(得分:4)
我使用 tomcat 和.war webapps所做的是构建一个带有解压缩战争的系统包,然后处理conf文件。我根本没有处理过Weblogic或JBoss,所以我不知道它如何处理解压缩的WAR内容。
1)构建一个包(RPM),在那里我做所有.war构建的东西,然后像:
mkdir -p %{buildroot}/var/lib/tomcat5/webapps/APP
cd %{buildroot}/var/lib/tomcat5/webapps/APP
unzip ../APP.war
rm ../APP.war
(以便解压缩的.war文件在包中,其中没有实际的.war文件。使用tomcat,它将单独保留该目录,特别是如果它没有写访问权限,因为文件属于根)
2)Puppet的东西有点像:
package {
"tomcat5":
require => Package["java-1.6.0-sun"],
ensure => installed;
"java-1.6.0-sun":
ensure => installed;
"APP":
ensure => installed,
notify => Service["tomcat5"],
require => Package["java-1.6.0-sun"];
}
file {
"/usr/share/tomcat5/webapps/APP":
source => [ "puppet:///MODULE/APP" ],
ensure => directory,
ignore => [ 'CVS', '.git', '.svn', '*~' ], # ignore revision control and backup files
purge => false, # leaves other stuff alone
replace => true, # replaces stock files with ours
recurse => true, # gets everything recursively
require => Package[APP], # install package first
notify => Service[tomcat5]; # restart tomcat after
}
这个特定的包在8个目录中有32个文件,我们正在修改或推出配置它。如果它只是几个文件,我会使用几个简单的file{}
资源来管理这些文件,而不是递归的东西。
如果您不想构建系统类型包,则可以将file{}
战争资源放入备用目录exec{"unzip ...": creates => '/path/to/unzipped/webapp;}
并拥有file{}
配置资源需要Exec["unzip ..."]
。