2010-12-13 16 views
31

Tomcatマネージャを使用して、自動的にデプロイ/アンデプロイするためのシェルスクリプトを作成しています。Tomcatマネージャのリモートデプロイスクリプト

http://tomcat.apache.org/tomcat-6.0-doc/manager-howto.html#Deploy_A_New_Application_Remotely上の指示に従い、私は

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

私の展開にカール使用して、私は、HTTPメソッドのPOSTはこのURLでサポートされていないと言って応答を取得します。

だから私は-G

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

を使用して取得する私のカールを変え、私はFAILの応答を取得するには - コンテキストパス/何かでアプリケーションをデプロイできませんでしたし、それがローカル上のファイルを探しているように見えます私のマシンの代わりにサーバー。ファイルをscpすることなくリモートで配布するプラグインがあるので、私は何が欠けているのだろうかと思っています。

私は現在考えられていません(私はTomcatマネージャの設定ページに他のオプションはありません)。

答えて

35

この方法は、(jevelopersにTomcat 7のための答えを参照)のTomcat 6で私のために働いている:

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

例:

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

非常に簡単peasyを。出力は次のようになります。

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

cURLマニュアルから情報を入手しました。http://curl.haxx.se/docs/httpscripting.htmlセクション5を参照してください。 –

+0

Brilliant、それは機能します。ありがとう。 – bluesman

+2

これはTomcat 7では機能しません。[回答者からの回答](http://stackoverflow.com/a/13367460/428628) –

1

アプリケーションを展開する最も簡単な方法は、Antスクリプトを作成することです。あなたが必要とする唯一の他のもの(Antは別として)は、catalina-ant.jarがクラスパスに存在することです。

は、マニュアルのこの章を見てください: http://tomcat.apache.org/tomcat-6.0-doc/manager-howto.html#Executing_Manager_Commands_With_Ant

スクリプトが同様のことを行う:マネージャアプリにあなたの.warをデプロイするためにHTTPを使用しています。まだカールを使用したい場合は、パケットをキャプチャして正確なヘッダーを表示することもできます。 Antソリューションは移植性が高く、エラーを起こしやすいと思います(たとえば、低レベルのデプロイメントAPIを変更する場合はどうでしょうか?)。

+0

お返事ありがとうございます。私は、最悪の場合のシナリオとして、私はantを使用するだろうと推測しますが、何らかの依存メカニズムなしで何らかの種類のデプロイメント・メカニズムを使用するのが良いでしょう。 – bluesman

+0

catalina-ant.jarはすべてのTomcatインストールに含まれていますので、あなたの意見が分かっているかどうかわかりません。毎日何千ものWebアプリケーションを(再)デプロイしても、JVMを起動するオーバーヘッドはごくわずかです。 – mindas

+1

私たちはサーバーについて心配していません。antを使用して展開するには、依然としてクライアントマシンにantがインストールされている必要があります。 – bluesman

42

この質問に対する更新情報を提供します。

Tomcat 7がマネージャAPIを変更しました。

を参照してください:新しいURLパターンに続き Manager commands

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

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

セキュリティ

サーバーはリモートIPを受け入れる必要があることに注意してください。

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

これはオプションの設定であり、必須ではありませんが、クロスドメインの役割と適切なマネージャーの資格情報を必要とします。

Tomcat 8 - Tomcat 7と同じ規則が適用されます。同じコマンドです。ジェンキンスを使用して、Windowsマシン上でGitBashでシェルスクリプトを使用してデプロイしたい人のために

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

+6

Tomcatにデプロイするユーザーは 'manager-script'ロールを有効にする必要がありますテキストインタフェースにアクセスします。 – Franklin

+0

ありがとう!!!!私に多くの時間を節約 – leon

+0

リモートマシンのTomcatに導入するためにこれを行うことはできますか? – jos

3

代わりジェンキンスのプラグイン

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

注意をデプロイします。ここでは

は完全なドキュメントがあります:

  1. curl -vオプションが冗長(オプション)
  2. // Windowsマシン上でGitBashのコンテキストパスが動作する前に2つのスラッシュ(/スラッシュは何もしません)
  3. また、リモートサーバーに展開する場合は、ファイアウォールを検討してください!
+0

tomcat_usernameとtomcat_passwordを、このスクリプトの-uの後に入れ、ホストとポートは入れないでください。 –

0

Jetの回答を改善する、これはTomcat 8のJava 64ビットで動作します。

これは私が実行したものだった:

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' 

私たちはTomcatのユーザーを設定する場合、これは動作します:

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

で:

<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を再起動し、使用してその準備ができてカール・ウィット・ジェンキンス!

関連する問題