2009-04-08 19 views
19

मैवेन का उपयोग करके कई टॉमकैट सर्वरों पर युद्ध तैनात करने का सबसे कम उदाहरण क्या है?मैवेन एकाधिक टॉमकैट सर्वर पर तैनात

मैंने निम्नलिखित यूआरएल की कोशिश की है और मेलिंग सूची से पूछा है, लेकिन कम से कम कुछ भी नहीं आ रहा है और बस काम करेगा।

उदाहरण हो सकता है कि "सबसे कम से कम" समाधान बिल्कुल कम से कम नहीं है सर्वर कहीं उदाहरण में परिभाषित (नमूना उपयोगकर्ता नाम/पासवर्ड के साथ)

उत्तर

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 निरंतर एकीकरण सर्वर की मैट्रिक्स सुविधा में आईएनजी। मैंने इस सुविधा here के बारे में एक संक्षिप्त स्पष्टीकरण दिया।

असल में, आप हडसन में एक "सामान्य" मेवेन 2 नौकरी को परिभाषित करते हैं, और मैट्रिक्स फीचर के साथ, आप हडसन से इस काम को कई बार एक पर्यावरण चलाने के लिए कह सकते हैं। दूसरे शब्दों में, यदि आप अपने हडसन काम बनाते हैं और फिर आप env पैरामीटर के लिए हर संभव मान के साथ "पर्यावरण अक्ष" परिभाषित करें

  • foo1
  • foo2
  • foo3
  • .. ।

हडसन तो mvn कमांड के साथ और पैरामीटर -de साथ आवेदन का निर्माण करेगा NV = foo1 .Once इस बिल्ड समाप्त हो गया है, यह एक ही आवेदन लेकिन निर्माण करेगा पैरामीटर -Denv = foo2 साथ, और इतने पर ...

इस तरह, हडसन हर वातावरण में अपने आवेदन को तैनात करेगा। ..

मुझे आशा है कि मेरी समाधान आप अपने लक्ष्य तक पहुंचने में मदद मिलेगी ...

+1

पवित्र बकवास, यह संभावित रूप से बेहद उपयोगी है, क्योंकि हडसन वही है जो मैं इसका उपयोग कर लक्ष्य बना रहा था .... – cgp

+0

मजेदार बात यह है कि यह मेरे द्वारा दिए गए लिंक के समान ही है, लेकिन यह बिल्कुल स्पष्ट नहीं है। कोशिश करने के लिए इंतजार नहीं कर सकता। – cgp

+2

क्या मैवेन एक्स बार कॉल किए बिना ऐसा करने का कोई तरीका है? मुझे लगता है कि तैनाती के लिए फिर से निर्माण करना समय लेने वाला है, इसके अलावा यदि इन बिल्डों के दौरान कोड में नया बदलाव आया तो यह क्लस्टर में असंगत तैनाती का कारण बन सकता है – maverick

1

होना चाहिए। यदि आपको स्वयं को स्वर्ग में करने में समस्याएं हैं, तो चींटी का उपयोग करने का प्रयास करें: दो अलग-अलग तैनाती कार्य (एक प्रति सर्वर) और एक अन्य कार्य बनाएं जो उन्हें निर्भरता के रूप में रखें। चींटी का उपयोग कर टॉमकैट सर्वर पर तैनात करने के कई उदाहरण हैं। Just google them। इसे करने के बाद, आपको नए चींटी कार्यों को मैवेन में एकीकृत करने की आवश्यकता है जो antrun प्लगइन का उपयोग कर मुश्किल नहीं है।

+0

सच है, मैं एक उदाहरण की उम्मीद कर रहा था। – cgp

0

इस उत्तर घाट के लिए और एक अलग स्थिति के लिए है, लेकिन आप इसे उपयोगी लग सकते वैसे भी।

पिछली परियोजना पर हमने जेटी का उपयोग किया, इसलिए मैंने एक साधारण जेटी नियोक्ता मॉड्यूल लिखा जो समय-समय पर मैवेन रिपोजिटरी को स्कैन करेगा और जैसे ही वे उपलब्ध हो गए नए कलाकृतियों को डाउनलोड और तैनात करेंगे। यह स्टेजिंग और विकास मशीनों के एक छोटे समूह पर अच्छी तरह से भाग गया।

आप Polar Rose Jetty Maven Deployer प्रोजेक्ट में Google कोड पर कोड पा सकते हैं।

ध्यान दें कि हमने केवल विकास और स्टेजिंग सर्वर के लिए ऐसा किया है। मेरी राय में उत्पादन ऐप्स को कभी भी स्वचालित रूप से अपग्रेड नहीं किया जाना चाहिए।

8

एकाधिक प्रोफाइल का उपयोग करने के संबंध में, जीवन चक्र कुछ चरणों को डुप्लिकेट करना प्रतीत होता है - उदा। चर द्वारा सक्रिय प्रोफाइल का उपयोग करते समय परीक्षणों की संख्या दोगुना हो गई। हमने पाया कि कैटलिना-चींटी लाइब्रेरी का उपयोग करना अधिक प्रभावी था;) और इसकी अधिक "न्यूनतम"। लाइफसाइक्ल चरण को "रन" लक्ष्य को व्यवस्थित करने के लिए "रन" लक्ष्य को संलग्न करने के लिए या पैकेज के बाद चलाएं: mvn पैकेज antrun:

आप एंटी-कॉन्ट्रिब लाइब्रेरी के साथ थोड़ा अधिक फैंसी प्राप्त कर सकते हैं और बना सकते हैं सर्वर की सूची के साथ लूप के लिए, लेकिन यहां 2 हार्ड कोड किए गए सर्वर यूआरएल के लिए एक स्थिर कॉन्फ़िगरेशन है।

<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-चींटी ऊपर उपयोग मैन्युअल हमारे वितरित Maven भंडार में तैनात किया गया की विशेष संस्करण है, यह बिल्ला वितरण की lib निर्देशिका में पाया जा सकता है।

2

यह पुराने प्रश्न के उत्तर में बहुत देर हो गया है, लेकिन मुझे पूरा यकीन है कि लोगों को इसमें दिलचस्पी होगी। मैंने अभी मैवेन और चींटी कार्यों का उपयोग करके कई तैनाती चलाने के लिए हासिल किया है।

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

तो फिर तुम संपत्ति फ़ाइल की जरूरत है: गुप्त (मेरे लिए या 2 के रूप में मैं गर्म घाट में मेरी क्षुधा की तैनाती और एक युद्ध है और एक xml फ़ाइल स्थानांतरित करने की आवश्यकता) एक macrodef उपयोग करने के लिए और एक चींटी संपत्ति फ़ाइल का उपयोग है की तरह कुछ होने के लिए:

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= 

आदि ...

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

चाल द्वारा इस्तेमाल किया सर्वर config प्रति विकल्प के एक ब्लॉक पर कि @ {} पूर्वता के रूप में प्रयोग macrodef विशेषता संपत्ति मूल्यांकन $ खत्म हो गया है { } चींटी में।

संबंधित मुद्दे