将配置与WAR / EAR分离用于Puppet部署

时间:2011-12-02 09:58:58

标签: jboss weblogic configuration-management puppet

我们为Weblogic和Jboss服务器进行了大量的Java Web应用程序部署。部署通常看起来像这样:

  1. 将代码和默认配置复制到应用程序服务器或Weblogic管理服务器上的暂存目录。

  2. 编辑属性文件以设置特定于环境的变量(IP地址,用户名等)

  3. 运行ant以创建ear / war并将其放在相应的目录中。

  4. 启动服务

  5. 事实证明,这是一个非常不友好的步骤,可以将Puppet用作我们的配置管理工具。我们更喜欢一个与Puppet的Package,File,Service三件式更相似的过程,但是在构建ear / war之前必须配置属性会使这很困难,因为它需要一个额外的步骤来构建战争/耳朵。填充属性后的主机。

    有没有办法构建一个与环境无关的战争/耳朵并将配置保持在外部,从而消除额外的构建步骤?

    有没有人专门使用过Web应用程序和Puppet,你有什么建议吗?

1 个答案:

答案 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 ..."]