2010-12-13 19 views
31

Sto scrivendo uno script di shell per l'implementazione automatica/undeploy utilizzando il gestore tomcat.Script di distribuzione remota di Tomcat manager

Seguendo le istruzioni a http://tomcat.apache.org/tomcat-6.0-doc/manager-howto.html#Deploy_A_New_Application_Remotely, io uso ricciolo per la mia distribuzione

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

e ho la risposta dicendo metodo HTTP POST non è supportato da questo URL.

Così ho cambiare il mio curl per essere un ottenere utilizzando -G

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

ottengo una risposta di FAIL - Impossibile distribuire applicazioni in contesto percorso/qualcosa e sembra di essere alla ricerca per il file localmente su il server invece della mia macchina. Ci sono delle pluvi che eseguono la distribuzione remota senza dover scpare il file, quindi mi chiedo cosa mi manca.

Attualmente sono fuori idee (non vedo altre opzioni nella pagina di configurazione del gestore tomcat).

risposta

35

In questo modo sta lavorando per me su Tomcat 6 (Vedi jevelopers risposta per Tomcat 7):

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

Esempio:

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

Molto Easy Peasy. L'output è il seguente:

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

Ottenuto le mie informazioni dal manuale di cURL: http://curl.haxx.se/docs/httpscripting.html consulta la sezione 5 –

+0

Brillante, che funziona. Grazie. – bluesman

+2

Questo non funziona per Tomcat 7. Dai un'occhiata a [la risposta di jeveloper] (http://stackoverflow.com/a/13367460/428628) –

1

Il modo più semplice per distribuire un'app è scrivere uno script Ant. L'unica altra cosa (a parte Ant) di cui avrai bisogno è catalina-ant.jar per essere presente nel classpath.

Date un'occhiata a questo capitolo del manuale: http://tomcat.apache.org/tomcat-6.0-doc/manager-howto.html#Executing_Manager_Commands_With_Ant

Lo script fa una cosa simile: usa HTTP per distribuire la .war al gestore app. Potresti anche voler catturare i pacchetti per vedere le intestazioni esatte se vuoi ancora usare l'arricciatura. Non suggerirei arricciare perché penso che la soluzione Ant sia più portatile e soggetta a errori (ad esempio se cambieranno API di distribuzione di basso livello?).

+0

Grazie per la risposta. Immagino che, nel peggiore dei casi, userò ant, ma sarebbe bello usare una sorta di meccanismo di distribuzione senza dipendenze (più semplice da scalare). – bluesman

+0

catalina-ant.jar fa parte di ogni installazione Tomcat quindi non sono sicuro di aver compreso il tuo punto. Anche se (ri) distribuisci migliaia di applicazioni web ogni giorno, il sovraccarico del lancio di JVM dovrebbe essere trascurabile. – mindas

+1

Non siamo preoccupati per il server, per distribuire usando ant che è ancora necessario installare sul computer client. – bluesman

42

Fornire un aggiornamento a questa domanda.

Tomcat 7 ha cambiato la sua API gestore.

Si prega di fare riferimento a: Manager commands

Seguendo nuovo schema URL:

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

Esempio

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

Security

Tenere presente che il server deve essere in grado di accettare l'IP remoto.Questo è un esempio di configurazione:

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

Questa è un'impostazione facoltativa e non è necessario, ma avendo il ruolo di dominio Croce e Gestione credenziali appropriate è un must.

Tomcat 8 - le stesse regole si applicano a Tomcat 7. Gli stessi comandi.

Ecco una documentazione completa:

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

+6

Va notato che l'utente che esegue la distribuzione su tomcat deve avere il ruolo 'manager-script' abilitato per accedere all'interfaccia testuale. – Franklin

+0

grazie !!!! mi risparmi un sacco di tempo – leon

+0

possiamo farlo per la distribuzione in una macchina remota tomcat? – jos

3

Per chi usa Jenkins e desidera distribuire utilizzando script di shell in GitBash su una macchina Windows, invece di Jenkins distribuire plug

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 l'opzione è dettagliata (opzionale)
  2. // due barre in avanti prima che il percorso di contesto funzioni per GitBash su una macchina Windows (/ la singola barra in avanti non sarà in qualche modo)
  3. Anche quando si esegue la distribuzione su un server remoto, si consideri il firewall sì!
+0

Abbastanza sicuro che vuoi tomcat_username e tomcat_password dopo -u in questo script, e non l'host e la porta. –

0

Risposta di Jet miglioramento, questo funziona per me in tomcat 8, java 64 bit.

questo era quello che eseguo:

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' 

Ciò funzionerà se configuriamo gli utenti di Tomcat in:

/.../.../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 Riavvia e pronto all'uso arricciarsi con jenkins !!

Problemi correlati