2010-12-13 49 views
31

Je suis en train d'écrire un script shell à déployer/annuler automatiquement à l'aide du gestionnaire Tomcat.Script de déploiement à distance du gestionnaire Tomcat

suivant les instructions sur http://tomcat.apache.org/tomcat-6.0-doc/manager-howto.html#Deploy_A_New_Application_Remotely, je CURL pour mon déploiement

curl --anyauth -u username:pwd -d path=/something -d war=file:target/someWar.war https://someurl.com/manager/deploy 

Et je reçois la réponse en disant méthode HTTP POST est pas pris en charge par cette URL.

Je change ma boucle d'être obtenir l'aide -G

curl --anyauth -u username:pwd -G -d path=/something -d war=file:target/someWar.war https://someurl.com/manager/deploy 

Je reçois une réponse de FAIL - Impossible de déployer l'application dans le chemin contexte/quelque chose et il semble être à la recherche du fichier localement sur le serveur au lieu de ma machine. Il y a des pluies qui se déploient à distance sans avoir à scp le fichier plus je me demande ce qui me manque.

Je n'ai actuellement plus d'idées (je ne vois aucune autre option sur la page de configuration du gestionnaire de tomcat).

Répondre

35

De cette façon, travaille pour moi sur Tomcat 6 (Voir jevelopers pour répondre à tomcat 7):

curl --upload-file <path to warfile> "http://<tomcat username>:<tomcat password>@<hostname>:<port>/manager/deploy?path=/<context>&update=true" 

Exemple:

curl --upload-file target\debug.war "http://tomcat:[email protected]:8088/manager/deploy?path=/debug&update=true" 

Très facile comme bonjour. La sortie est comme ceci:

OK - Undeployed application at context path /debug 
OK - Deployed application at context path /debug 
+1

Vous avez mes informations du manuel cURL: http://curl.haxx.se/docs/httpscripting.html consultez la section 5 –

+0

Brillant, ça marche. Merci. – bluesman

+2

Cela ne fonctionne pas pour Tomcat 7. Jetez un coup d'oeil à [la réponse de jeveloper] (http://stackoverflow.com/a/13367460/428628) –

1

La méthode la plus simple pour déployer une application consiste à écrire un script Ant. La seule autre chose (hormis Ant) dont vous aurez besoin est catalina-ant.jar pour être présent dans le classpath.

Jetez un oeil à ce chapitre du manuel: http://tomcat.apache.org/tomcat-6.0-doc/manager-howto.html#Executing_Manager_Commands_With_Ant

Le script fait une chose similaire: utilise le protocole HTTP pour déployer votre .war à l'application de gestionnaire. Vous pourriez même vouloir capturer les paquets pour voir les en-têtes exacts si vous voulez toujours utiliser curl. Je ne recommanderais pas curl cependant car je pense que la solution d'Ant est plus portative et sujette aux erreurs (par exemple si elles changeront l'API de déploiement de bas niveau?).

+0

Merci pour la réponse. Je suppose que dans le pire des cas, je vais utiliser ant, mais ce serait bien d'utiliser une sorte de mécanisme de déploiement sans aucune dépendance (plus facile à étendre). – bluesman

+0

Le catalina-ant.jar fait partie de toutes les installations de Tomcat, donc je ne suis pas sûr de comprendre votre point. Même si vous (re) déployez des milliers de webapps chaque jour, le temps de lancement de la JVM devrait être négligeable. – mindas

+1

Nous ne sommes pas préoccupés par le serveur, à déployer à l'aide de la fourmi dont vous avez toujours besoin, installé sur la machine cliente. – bluesman

42

Fournir une mise à jour à cette question.

Tomcat 7 a modifié son API de gestionnaire.

S'il vous plaît se référer à: Manager commands

Suite nouveau modèle URL:

http://{host}:{port}/manager/text/{command}?{parameters} 

Exemple

curl -T "myapp.war" "http://manager:[email protected]:8080/manager/text/deploy?path=/myapp&update=true" 

Sécurité

Gardez à l'esprit que le serveur doit pouvoir accepter votre adresse IP distante.Ceci est un exemple de configuration:

<Context privileged="true" antiResourceLocking="false" 
     docBase="${catalina.home}/webapps/manager"> 
    <Valve className="org.apache.catalina.valves.RemoteAddrValve" 
     allow="127\.0\.0\.1" /> 
</Context> 

Ce paramètre est facultatif et n'est pas nécessaire, mais ayant le rôle de plusieurs domaines et les qualifications de gestionnaire approprié est un must.

Tomcat 8 - les mêmes règles s'appliquent à Tomcat 7. Mêmes commandes.

Voici une documentation complète:

http://tomcat.apache.org/tomcat-8.0-doc/manager-howto.html

+6

Il est à noter que l'utilisateur déployé sur tomcat doit avoir le rôle 'manager-script' activé pour accéder à l'interface de texte. – Franklin

+0

merci !!!! économisez-moi beaucoup de temps – leon

+0

pouvons-nous faire cela pour le déploiement dans une machine distante tomcat? – jos

3

Pour ceux qui utilisent Jenkins et veulent déployer en utilisant un script shell dans GitBash sur une machine Windows au lieu de Jenkins déployer le plugin

tomcat_host=192.10.10.100 
tomcat_port=8080 
tomcat_username=admin 
tomcat_password=12345 

context_path=myApplication 

curl -v -u ${tomcat_username}:${tomcat_password} -T ${artifact} 'http://'${tomcat_host}':'${tomcat_port}'/manager/text/deploy?path=//'${context_path}'' 

Remarque :

  1. L'option curl -v est verbeuse (facultatif)
  2. // deux barres obliques avant que le chemin contextuel ne fonctionne pour GitBash sur une machine Windows (/ seule barre oblique ne sera pas en quelque sorte)
  3. Également lors du déploiement sur un serveur distant, pensez à votre pare-feu ouais! Amélioration Jet réponse, cela fonctionne pour moi dans tomcat 8, java 64 bits
+0

Assez sûr que vous voulez tomcat_username et tomcat_password après le -u dans ce script, et non l'hôte et le port. –

0

C'était ce que j'Execute:

curl -v -u some_user:some_password -T /../my_app.war 'http://127.0.0.1:tomcat_port/manager/text/deploy?path=/my_app&update=true' 

Cela fonctionnera si nous configurons les utilisateurs de tomcat:

/.../.../apache-tomcat-8.5.0_001/conf/tomcat-users.xml 

avec:

<role rolename="manager-gui"/> 
<role rolename="manager-script"/> 
<role rolename="manager-jmx"/> 
<role rolename="manager-status"/> 
<role rolename="admin-gui"/> 
<role rolename="admin-script"/> 

<user username="some_user" password="some_password" roles="manager-gui,manager-script,manager-jmx,manager-status,admin-gui,admin-script"/> 

tomcat Redémarrer et prêt à l'emploi boucle whit jenkins !!