4

我们将 Java Web 应用程序部署到 Weblogic 和 Jboss 服务器上。部署通常如下所示:

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

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

  3. 运行 ant 以创建 ear/war 并将其放到适当的目录中。

  4. 启动服务

事实证明,将 Puppet 用作我们的配置管理工具时,这是一组非常不友好的步骤。我们更喜欢与 Puppet 的包、文件、服务三重奏更相似的过程,但是必须在构建 ear/war 之前配置属性使得这变得困难,因为它需要一个额外的步骤来构建 war/ear 在填充属性后的主机。

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

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

4

1 回答 1

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)木偶的东西有点像:

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

于 2011-12-02T18:39:12.190 回答