2013-08-09 9 views
7

मैं एक जेनकिंस नौकरी में कई मेवेन प्रोफाइल बनाने की कोशिश कर रहा हूं। प्रत्येक प्रोफ़ाइल कुछ कोड बदलती है और फिर mvn -Pdev install को mvn -Pprod install को कमांड लाइन में निष्पादित करके एक जार बनाता है (mvn -Pdev,prod install का उपयोग करके मेवेन के अनुसार काम करना चाहिए लेकिन यह मेरे लिए काम नहीं कर रहा है)।एकल जेनकिन्स नौकरी के लिए एकाधिक मेवेन प्रोफाइल बनाना

<profiles> 
<!-- prod profile --> 
    <profile> 
    <id>prod</id> 
    <build> 
     <plugins> 

      <plugin> 
       <groupId>com.google.code.maven-replacer-plugin</groupId> 
       <artifactId>replacer</artifactId> 
       <version>1.5.2</version> 

       <executions> 
        <execution>      
         <phase>process-resources</phase> 
         <goals> 
          <goal>replace</goal> 
         </goals> 
        </execution> 
       </executions> 

       <configuration> 

         <file>src/main/java/com/IQzone/android/configuration/AbstractHoldingRefreshable.java</file> 
        <replacements> 
         <replacement> 
          <token>TrUe</token> 
          <value>TOAST_SWITCH</value> 
         </replacement> 
        </replacements> 

       </configuration> 

      </plugin> 

     <plugin> 
      <artifactId>maven-jar-plugin</artifactId> 
      <executions> 
      <execution> 
       <phase>package</phase> 
       <goals> 
       <goal>jar</goal> 
       </goals> 
       <configuration> 
       <classifier>prod</classifier> 
       </configuration> 
      </execution> 
      </executions> 
     </plugin> 
     </plugins> 
    </build> 
    </profile> 


<!-- dev profile --> 
    <profile> 
    <id>dev</id> 
    <build> 
     <plugins> 

      <plugin> 
       <groupId>com.google.code.maven-replacer-plugin</groupId> 
       <artifactId>replacer</artifactId> 
       <version>1.5.2</version> 

       <executions> 
        <execution>      
         <phase>process-resources</phase> 
         <goals> 
          <goal>replace</goal> 
         </goals> 
        </execution> 
       </executions> 

       <configuration> 

        <file>src/main/java/com/IQzone/android/configuration/AbstractHoldingRefreshable.java</file> 
        <replacements> 
         <replacement> 
          <token>TOAST_SWITCH</token> 
          <value>TrUe</value> 
         </replacement> 
        </replacements> 

       </configuration> 

      </plugin> 

      <!-- build project with JAVA 1.6 --> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-compiler-plugin</artifactId> 
       <configuration> 
        <source>1.6</source> 
        <target>1.6</target> 
       </configuration> 
      </plugin> 


     <plugin> 
      <artifactId>maven-surefire-plugin</artifactId> 
      <configuration> 
      <skip>true</skip> 
      </configuration> 
     </plugin> 
     <plugin> 
      <artifactId>maven-jar-plugin</artifactId> 
      <executions> 
      <execution> 
       <phase>package</phase> 
       <goals> 
       <goal>jar</goal> 
       </goals> 
       <configuration> 
       <classifier>dev</classifier> 
       </configuration> 
      </execution> 
      </executions> 
     </plugin> 



     </plugins> 
    </build> 
    </profile> 
</profiles> 

मैं कैसे सेटअप जेनकींस स्वचालित रूप से एक भी जेनकींस नौकरी के लिए इन प्रोफाइल के दोनों निर्माण करने के लिए चाहते हैं जब भी काम एक निर्माण के लिए मारा जाता है: यहाँ अपने प्रोजेक्ट के pom.xml में दो प्रोफाइल कर रहे हैं? और इन दोनों जार आर्टिफैक्टरी में डाल दिया? मेरे पास जेनकिन्स ज्ञान बहुत कम है और वेब पर इस पर ज्यादा जानकारी नहीं है।

उत्तर

9

मेवेन में, यदि आप mvn -Pdev,prod का उपयोग करते हैं, तो आप एक कमांड में दोनों प्रोफाइल एक साथ सक्रिय कर रहे हैं।

ऐसा लगता है कि आप आदेश के 2 अलग रन यानी चाहते हैं, कुछ 2 करके आप कमांड लाइन पर प्राप्त होगा बनाता है:

mvn -Pdev install; mvn -Pprod install 

जेनकींस में आप के साथ इस लक्ष्य को हासिल कर सकते हैं या तो

  • एक फ्री स्टाइल प्रोजेक्ट जॉब (mvn -P$PROFILE install कार्यों को चलाने वाले 2 शेल बिल्डर्स के साथ)
  • 2 मेवेन प्रकार की नौकरियां (कि आप "अन्य परियोजनाओं के निर्माण के बाद निर्माण" का उपयोग करके एक दूसरे के बाद चेन कर सकते हैं)।
13

आप जेनकींस मैट्रिक्स नौकरी बना सकते हैं। एक मैट्रिक्स जॉब एक ​​ही नौकरी को बदलती सेटिंग्स (आपके मामले में: एक स्ट्रिंग) के साथ चलाने की अनुमति देता है।

प्रत्येक बदलती सेटिंग को धुरी कहा जाता है। आपके मामले में आप एक स्ट्रिंग अक्ष बनायेंगे जिसमें दो मान होंगे: देव और प्रोड।

इस तरह आपकी नौकरी दोनों मूल्यों के साथ दो बार दौड़ जाएगी।

हालांकि: प्रोफाइल का उपयोग खतरनाक है। चूंकि निर्माण को चलाने के लिए उपयोग की जाने वाली प्रोफ़ाइल को आपके आर्टिफैक्ट में संहिताबद्ध नहीं किया गया है, इसलिए आपके ब्रेक में "एक स्रोत संशोधन हमेशा एक ही लक्ष्य आर्टिफैक्ट" का नेतृत्व करना चाहिए (देखें: http://www.blackbuild.com/how-to-really-use-maven-profiles-without-endangering-your-karma/ अधिक विस्तृत स्पष्टीकरण के लिए)

विचार करें क्लासिफायर (-dev और -prod) या इससे भी बेहतर का उपयोग करके दो अलग-अलग कलाकृतियों का निर्माण करना: अपने निर्माण के दो अलग-अलग मॉड्यूल बनाएं, प्रत्येक व्यक्ति केवल आपके लक्षित कलाकृतियों में से एक बनाता है।

+0

मुझे एक समस्या है जो इस तरह से कम है।मैंने इस लिंक में रखा है, क्या आप इसे देख सकते हैं और यदि आपके पास कोई समाधान है तो मुझे बताएं। https://stackoverflow.com/questions/48002535/one-profile-properties-are-overriding-with-another-profile-properties-in-maven – SubbaReddy

0

आप प्रत्येक निष्पादन के लिए अलग निष्पादन आईडी सेट करके ऐसा कर सकते हैं और फिर आदेश

mvn -Pdev,prod clean package install

1

इसके अलावा एक मुक्त शैली नौकरी में काम और कई Maven आमंत्रण मैट्रिक्स करने के लिए गति प्रदान, वहाँ एक और तरीका है: प्री-बिल्ड चरण के रूप में Run top-level Maven targets और मेवेन जेनकींस प्लगइन के माध्यम से अन्य कमांड चलाएं।

सुनिश्चित करें कि प्री-बिल्ड चरण -Dmaven.repo.local=/${whatever-it-is}/${EXECUTOR_NUMBER} की आपूर्ति करके अन्य आदेश के रूप में एक ही मेवेन रेपो का उपयोग करता है।

कृपया मैट्रिक्स नौकरी, आदि पर विवरण के लिए अन्य उत्तरों देखें।

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