Question

Nous faisons beaucoup de déploiements d'applications Java Web aux serveurs Weblogic et Jboss. Très souvent, les regards de déploiement comme celui-ci:

  1. Copiez le code et par défaut configs à un répertoire de mise en scène sur le serveur d'applications ou Weblogic serveur d'administration.

  2. Modifier un fichier de propriétés pour définir les variables d'environnement spécifiques (adresses IP, noms d'utilisateur, etc.)

  3. Exécuter ant pour créer l'oreille / guerre et déposez-le dans le répertoire approprié.

  4. Démarrer les services

est avéré être un ensemble très désagréable d'étapes à utiliser avec des marionnettes comme outil de gestion de configuration. Nous préférerions un processus qui est beaucoup plus semblable au paquet, fichier, service de tiercé gagnant de marionnettes, mais d'avoir à configurer les propriétés avant de construire l'oreille / guerre rend cette difficile car il nécessite une étape supplémentaire pour construire la guerre / l'oreille sur la hôte après les propriétés ont été renseignés.

Y at-il un moyen de construire une guerre / oreille respectueuse de l'environnement agnostique et garder les configurations externes, en supprimant l'étape de construction supplémentaire?

Quelqu'un at-il travaillé spécifiquement avec des applications Web et de marionnettes, et avez-vous des recommandations?

Était-ce utile?

La solution

What I've done with tomcat and .war webapps is build a system package with an unzipped war and then deal with the conf files. I haven't dealt with Weblogic much or JBoss at all, so I don't know how it deals with unzipped WAR stuff.

1) Build a package (RPM) where I do all the .war building stuff, then something like:

mkdir -p %{buildroot}/var/lib/tomcat5/webapps/APP
cd %{buildroot}/var/lib/tomcat5/webapps/APP
unzip ../APP.war
rm ../APP.war

(so that the unzipped .war file is in the package with no actual .war file in there. With tomcat it will then leave that directory alone, especially if it doesn't have write access because the files belong to root)

2) Puppet stuff somewhat like:

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
}

This particular package has 32 files in 8 directories that we're modifying or pushing out to configure it. If it was just a few files, I'd use a couple simple file{} resources to manage those files instead of the recursive stuff.

If you didn't want to build a system type package, you could do a file{} resource for the war into an alternate directory, an exec{"unzip ...": creates => '/path/to/unzipped/webapp;} and have the file{} resources for configuration require the Exec["unzip ..."].

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top