2009-04-08 13 views

答えて

25

マルクスルクスの考えはまた、プロファイル管理で、Maven2を溶液で適用することができます。

<build> 
    <plugins> 
     <plugin> 
      <groupId>org.codehaus.cargo</groupId> 
      <artifactId>cargo-maven2-plugin</artifactId> 
     </plugin> 
    </plugins> 
    ... 
</build> 
<profiles> 
    <profile> 
     <id>env-foo1</id> 
     <!-- Activated when -Denv=foo1 is given as parameter. --> 
     <activation> 
      <property> 
       <name>env</name> 
       <value>foo1</value> 
      </property> 
     </activation> 
     <properties> 
      <deploy.env>xxx</deploy.env> 
      <tomcat.manager>http://foo1/manager</tomcat.manager> 
      <tomcat.manager.username>foo</tomcat.manager.username> 
      <tomcat.manager.password>bar</tomcat.manager.password> 
     </properties> 
    </profile> 
    <profile> 
     <id>env-foo2</id> 
     <!-- Activated when -Denv=foo2 is given as parameter. --> 
     <activation> 
      <property> 
       <name>env</name> 
       <value>foo2</value> 
      </property> 
     </activation> 
     <properties> 
      <deploy.env>dev</deploy.env> 
      <tomcat.manager>http://foo2/manager</tomcat.manager> 
      <tomcat.manager.username>foo</tomcat.manager.username> 
      <tomcat.manager.password>bar</tomcat.manager.password> 
     </properties> 
    </profile> 
    ... 
</profiles>  

はその後、あなただけの十分なパラメータを指定して、X回にMVNコマンドを実行する必要があります(-Denv = foo1が-Denv = foo2は、...)


はそれに加えて、あなたは私たちによりこの溶液を高めることができますHudson Continuous Integrationサーバーのマトリックス機能を使用してください。私はこの機能について簡単な説明をしたhere

基本的には、Hudsonで「通常の」Maven2ジョブを定義するだけで、Matrix機能では、環境ごとにこのジョブを複数回実行するようにHudsonに依頼できます。他の言葉では、あなたハドソンジョブを作成した後、あなたはENVパラメータのすべての可能な値で "環境軸" を定義します。

  • foo1の
  • foo2は
  • foo3
  • .. 。

ハドソンは、MVNコマンドとパラメータ-Deを使用してアプリケーションを構築しますNV = foo1の .Onceこのビルドが終了し、それはそうで同じアプリケーションをビルドしますが、パラメータ-Denv = foo2はと、となります...

この方法で、ハドソンは、すべての環境でアプリケーションをデプロイします。 ..私は私の解決策は、あなたの目標に到達するためにあなたを助けることを願っています

...

+1

神聖ながらくたは、ハドソンは、私はこれを使用して標的にされた、まさにあるので、これは、潜在的に非常に有用である.... – cgp

+0

おかしい事はある、これは私が与えたリンクが示唆されたものと同様であるが、それは正確には明らかではありません。試してみるのが待ちきれない。 – cgp

+2

Maven Xを呼び出すことなくこれを行う方法はありますか?私は、単にビルドをビルドするのは時間がかかることに加えて、これらのビルド中にコードにコミットされた新しい変更があった場合には、クラスタ全体で矛盾した展開につながる可能性があります – maverick

1

たぶん「最も最小限」ソリューションは全く最小限のではない例で定義されたサーバーを持つ必要があります。もし、それ自体で問題がある場合は、antを使ってみてください:2つの異なるデプロイメントタスク(サーバごとに1つ)とそれを依存関係とする別のタスクを作成してください。 antを使用してTomcatサーバーにデプロイする方法の例がいくつかあります。 Just google them。 これを行うには、新しいAntタスクを、antrunプラグインを使って全く難しくないmavenに統合する必要があります。

+0

実際、私は例を期待していました。 – cgp

0

この回答は桟橋のためにと若干異なる状況のためですが、とにかくそれが役に立つかもしれません。我々は桟橋を使用し、私は定期的にMavenのリポジトリとダウンロードをスキャンして、すぐに彼らが利用可能になったとして、新たなアーティファクトを展開します簡単な桟橋デプロイヤモジュールを書いた以前のプロジェクトで

。これは、ステージングと開発のマシンの小さなクラスター上でうまくいきました。

あなたはPolar Rose Jetty Maven DeployerプロジェクトではGoogle Codeでのコードを見つけることができます。我々は唯一の開発やステージングサーバのためにこれをやった

注意。私の意見では、プロダクションアプリは決して自動的にアップグレードされるべきではありません。複数のプロファイルを使用してに関して

8

、ライフサイクルは、特定のステップを複製するように見えた - 例えば変数によってアクティブ化されたプロファイルを使用すると、テストの数が2倍になります。我々は、catalina-antライブラリを使用する方がはるかに効果的であることを発見しました;) 「実行」の要素をライフサイクルの段階に付けて、合理化するか、またはパッケージの後に実行する:mvn package antrun:run

ant-contribライブラリを使用してもう少し気が利いたら、サーバーのリストを含むforループですが、ここでは2つのハードコードされたサーバーURLの静的構成です。

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-antrun-plugin</artifactId> 
    <version>1.6</version> 
    <configuration> 
     <target> 
      <taskdef name="deploy" classname="org.apache.catalina.ant.DeployTask"/> 
      <deploy url="http://tc-app-01:8080/manager" username="manager" password="pass" 
        path="/app-path" war="file:${project.build.directory}/${project.build.finalName}.${project.packaging}" update="true"/> 

      <deploy url="http://tc-app-02:8080/manager" username="manager" password="pass" 
        path="/app-path" war="file:${project.build.directory}/${project.build.finalName}.${project.packaging}" update="true"/> 
     </target> 
    </configuration> 
    <dependencies> 
     <dependency> 
      <groupId>tomcat</groupId> 
      <artifactId>catalina-ant</artifactId> 
      <version>6.0.29</version> 
     </dependency> 
    </dependencies> 
</plugin> 

上記のcatalina-antの特定のバージョンは、分散メインリポジトリに手動でデプロイされました。これはtomcatディストリビューションのlibディレクトリにあります。

2

これは、古い質問へのかなり後半の答えですが、私は人々がそれに興味があるだろう、かなり確信しています。 MavenとAntタスクを使用して複数のデプロイメントを実行したところです。次にプロパティファイルのニーズ

<plugin> 
    <artifactId>maven-antrun-plugin</artifactId> 
    <version>1.7</version> 
    <executions> 
     <execution> 
      <phase>install</phase> 
      <configuration> 
       <tasks> 
        <taskdef name="scp" 
         classname="org.apache.tools.ant.taskdefs.optional.ssh.Scp" 
         classpath="/usr/local/java/ant/lib/ant-jsch.jar:/usr/local/java/ant/lib/jsch-0.1.45.jar" /> 
        <macrodef name="deploy"> 
         <attribute name="server" default="NOT SET" /> 
         <attribute name="file" default="NOT SET" /> 
         <attribute name="todir" default="NOT SET" /> 
         <attribute name="port" default="NOT SET" /> 
         <attribute name="passphrase" default="NOT SET" /> 
         <attribute name="keyfile" default="NOT SET" /> 
         <sequential> 
          <echo message="Deploying to @{server}" /> 
          <echo message="Deploying @{file} to @{todir}" /> 
          <scp 
           file="@{file}" todir="@{todir}" 
           port="@{port}" passphrase="@{passphrase}" 
           keyfile="@{keyfile}" /> 
         </sequential> 
        </macrodef> 
        <macrodef name="deploy-app"> 
         <attribute name="config" default="NOT SET" /> 
         <sequential> 
          <property file="deploy.properties"/> 
          <echo message="Deploying to @{config}" /> 
          <deploy server="${@{config}.jetty.server.host}" 
            file="${project.build.directory}/${project.build.finalName}.${project.packaging}" 
            todir="${@{config}.jetty.server.user}@${@{config}.jetty.server.host}:${@{config}.jetty.server.baseDir}/${@{config}.jetty.server.webappsDir}" 
            port="${@{config}.jetty.server.port}" 
            passphrase="${@{config}.jetty.server.passphrase}" 
            keyfile="/home/steff/.ssh/id_rsa"/> 
          <deploy server="${@{config}.jetty.server.host}" 
            file="${project.build.finalName}.xml" 
            todir="${@{config}.jetty.server.user}@${@{config}.jetty.server.host}:${@{config}.jetty.server.baseDir}/${@{config}.jetty.server.contextDir}" 
            port="${@{config}.jetty.server.port}" 
            passphrase="${@{config}.jetty.server.passphrase}" 
            keyfile="/home/steff/.ssh/id_rsa"/>          
         </sequential> 
        </macrodef>        
        <deploy-app config="home"/>  
        <deploy-app config="wap"/> 
       </tasks> 
      </configuration> 
      <goals> 
       <goal>run</goal> 
      </goals> 
     </execution> 
    </executions> 
</plugin> 

:秘密は(私は暑い桟橋で私のアプリを展開し、戦争とxmlファイルを転送する必要があるとして、私のためか、2)macrodefを使用することで、ANTプロパティファイルを使用して以下のようなものにするために:

<deploy-app config="<config>"/> 

トリックが使用するサーバ設定ごとにオプションのブロックに

home.jetty.server.user= 
home.jetty.server.port= 
home.jetty.server.host= 
home.jetty.server.baseDir= 
home.jetty.server.webappsDir= 
home.jetty.server.contextDir= 
home.jetty.server.passphrase= 
wap.jetty.server.user= 
wap.jetty.server.port= 
wap.jetty.server.host= 
wap.jetty.server.baseDir= 
wap.jetty.server.webappsDir= 
wap.jetty.server.contextDir= 
wap.jetty.server.passphrase= 

などは... macrodef属性は、特性評価$より優先として@ {}を使用していることです{ }のアリです。

関連する問題