2010-12-13 32 views
31

Estoy escribiendo un script de shell para implementar/deshacer la implementación automática usando el administrador de tomcat.Script de despliegue remoto de Tomcat Manager

Siguiendo las instrucciones de http://tomcat.apache.org/tomcat-6.0-doc/manager-howto.html#Deploy_A_New_Application_Remotely, utilizo mi rizo para el despliegue

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

y me da la respuesta diciendo método POST HTTP no es compatible con esta dirección URL.

así que cambio mi rizo ser un conseguir usando -G

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

consigo una respuesta de fallar - Error al desplegar la aplicación en el contexto ruta/algo y parece estar buscando el archivo localmente en el servidor en lugar de mi máquina. Hay plugins que se implementan de forma remota sin tener que pasar el archivo, así que me pregunto qué me estoy perdiendo.

Actualmente estoy sin ideas (no veo ninguna otra opción en la página de configuración de tomcat manager).

Respuesta

35

De esta manera se trabaja para mí en Tomcat 6 (Ver jevelopers responder por Tomcat 7):

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

Ejemplo:

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

Muy fácil peasy. La salida es así:

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

Obtuve mi información del manual cURL: http://curl.haxx.se/docs/httpscripting.html echa un vistazo a la sección 5 –

+0

Brillante, eso funciona. Gracias. – bluesman

+2

Esto no funciona para Tomcat 7. Eche un vistazo a [la respuesta de jeveloper] (http://stackoverflow.com/a/13367460/428628) –

1

La forma más fácil de implementar una aplicación es escribir un script Ant. La única otra cosa (aparte de Ant) que necesitará es catalina-ant.jar para estar presente en el classpath.

Tenga una mirada en este capítulo del manual: http://tomcat.apache.org/tomcat-6.0-doc/manager-howto.html#Executing_Manager_Commands_With_Ant

El script hace una cosa similar: utiliza HTTP para desplegar su .war a la aplicación de administrador. Incluso podría querer capturar los paquetes para ver los encabezados exactos si aún desea usar curl. Sin embargo, no recomendaría Curl ya que creo que la solución Ant es más portátil y propensa a errores (por ejemplo, ¿qué pasaría si cambiaran la API de implementación de bajo nivel?).

+0

Gracias por la respuesta. Supongo que, en el peor de los casos, usaré hormiga, pero sería bueno usar algún tipo de mecanismo de implementación sin dependencias (más fácil de escalar). – bluesman

+0

El catalina-ant.jar es parte de cada instalación de Tomcat, por lo que no estoy seguro si entendiste tu punto. Incluso si implementa (re) miles de aplicaciones web todos los días, la sobrecarga del lanzamiento de JVM debería ser insignificante. – mindas

+1

No estamos preocupados por el servidor, para implementar usando la hormiga usted todavía necesita una hormiga instalada en la máquina del cliente. – bluesman

42

Proporcionando una actualización a esta pregunta.

Tomcat 7 ha cambiado su API de administrador.

Por favor, consulte: Manager commands

Siguiendo nuevo patrón de URL:

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

Ejemplo

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

Seguridad

Tenga en cuenta que el servidor debe poder aceptar su IP remota.Este es un ejemplo de configuración:

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

Esta es una configuración opcional y no es necesaria, pero que tiene Cruz papel de dominio y las credenciales del gestor adecuada es una necesidad.

Tomcat 8 - aplican las mismas reglas que Tomcat 7. Mismos comandos.

Aquí es una documentación completa:

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

+6

Se debe tener en cuenta que el usuario que implementa a tomcat debe tener el rol 'manager-script' habilitado para poder accede a la interfaz de texto. – Franklin

+0

gracias !!!! me ahorra mucho tiempo – leon

+0

¿podemos hacer esto para implementar en una máquina remota tomcat? – jos

3

Para aquellos que utilizan Jenkins y desea implementar el uso de script de shell en GitBash en una máquina Windows en lugar de Jenkins desplegar plug-in

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}'' 

Nota :

  1. curl -v La opción es verbosa (opcional)
  2. // dos barras diagonales antes de que la ruta de contexto funcione para GitBash en una máquina con Windows (/ una sola barra diagonal no lo hará de alguna manera)
  3. También cuando se despliega en un servidor remoto, ¡considere su firewall sí!
+0

Bastante seguro que quiere tomcat_username y tomcat_password después de -u en este script, y no el host y el puerto. –

0

Mejorando la respuesta de Jet, esto funciona para mí en tomcat 8, java 64 bits.

Esto era lo que yo haga:

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' 

Esto funcionará si configuramos usuarios de Tomcat en:

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

con:

<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 Reiniciar y listo para su empleo curl whit jenkins !!

Cuestiones relacionadas