it-swarm-eu.dev

Script de déploiement à distance du gestionnaire Tomcat

J'écris un script Shell pour déployer/annuler le déploiement automatiquement à l'aide du gestionnaire Tomcat.

En suivant les instructions sur http://Tomcat.Apache.org/Tomcat-6.0-doc/manager-howto.html#Deploy_A_New_Application_Remotely , j'utilise 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 disant que la méthode HTTP POST n'est pas prise en charge par cette URL.

Donc je change ma boucle pour être en utilisant -G

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

J'obtiens une réponse de FAIL - Impossible de déployer l'application sur le chemin de contexte/quelque chose et il semble rechercher le fichier localement sur le serveur au lieu de ma machine. Il y a plusieurs qui se déploient à distance sans avoir à parcourir le fichier, donc je me demande ce qui me manque.

Je suis actuellement à court d'idées (je ne vois aucune autre option sur la page de configuration du gestionnaire Tomcat).

36
bluesman

Cette méthode fonctionne pour moi sur Tomcat 6 (voir la réponse des développeurs pour 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"

Peasy très facile. La sortie est comme ceci:

OK - Undeployed application at context path /debug
OK - Deployed application at context path /debug
40
s3v1

Fournir une mise à jour de cette question.

Tomcat 7 a changé son API de gestionnaire.

Veuillez vous référer à: commandes du gestionnaire

Suivant le nouveau modèle d'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é

N'oubliez pas 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>

Il s'agit d'un paramètre facultatif et n'est pas requis, mais le rôle interdomaine et les informations d'identification de gestionnaire appropriées sont indispensables.

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

Voici une documentation complète:

http://Tomcat.Apache.org/Tomcat-8.0-doc/manager-howto.html

48
jeveloper

Pour ceux qui utilisent Jenkins et souhaitent déployer à l'aide du script Shell dans GitBash sur une machine Windows au lieu du plugin de déploiement Jenkins

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 détaillée (facultatif)
  2. // deux barres obliques avant que le chemin de contexte ne fonctionne pour GitBash sur une machine Windows (/ une seule barre oblique ne le sera pas)
  3. Aussi lors du déploiement sur un serveur distant, pensez à votre pare-feu ouais!
3
Jet

Le moyen le plus simple de déployer une application est d'écrire un script Ant. La seule autre chose (à part Ant) dont vous aurez besoin est catalina-ant.jar pour être présent dans le chemin de classe.

Jetez un œil à 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 HTTP pour déployer votre .war sur l'application gestionnaire. Vous pouvez même vouloir capturer les paquets pour voir les en-têtes exacts si vous souhaitez toujours utiliser curl. Je ne recommanderais pas le curl, car je pense que la solution Ant est plus portable et sujette aux erreurs (par exemple, si elle changera l'API de déploiement de bas niveau?).

1
mindas

Amélioration de la réponse Jet, cela fonctionne pour moi dans Tomcat 8, Java 64 bits.

C'est ce que j'exécute:

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 Tomcat dans:

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

Redémarrez Tomcat et il sera prêt à déployer des guerres à partir de clients distants comme curl, jenkins, travis, etc.

1
JRichardsz