2013-02-12 108 views
36

मैं Travis-CI उपयोग कर रहा हूँ निरंतर एकीकरण प्रदान करने के लिए कुछ जावा ओपन सोर्स प्रोजेक्ट मैं पर काम कर रहा हूँ के लिए बनाता है बनाता है।Maven आधारित सतत एकीकरण के लिए दबा GPG हस्ताक्षर करने (ट्रैविस सीआई)

आम तौर पर यह सुचारू रूप से काम करता है, लेकिन मैं जब पोम GPG हस्ताक्षर करने, उदा निर्दिष्ट करता है एक समस्या है

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-gpg-plugin</artifactId> 
    <version>1.4</version> 
    <executions> 
    <execution> 
     <id>sign-artifacts</id> 
     <phase>verify</phase> 
     <goals> 
     <goal>sign</goal> 
     </goals> 
    </execution> 
    </executions> 
</plugin> 

इस कारण ट्रैविस विफल निर्माण - जाहिरा तौर पर, क्योंकि यह एक पदबंध उपलब्ध नहीं है, जबकि mvn install चल रहा है। एक उदाहरण के लिए this build देखें।

सीआई परीक्षण निर्माण के लिए जीपीजी हस्ताक्षर छोड़ने के लिए मेवेन और/या ट्रेविस को कॉन्फ़िगर करने का सबसे अच्छा तरीका क्या है, लेकिन जब भी मैं उचित रिलीज बिल्ड करता हूं तो GPG हस्ताक्षर निष्पादित करता हूं?

उत्तर

20

आप सुनिश्चित करें कि आप केवल जब तुम रिहाई का निर्माण करना चलाने बनाने के लिए एक प्रोफ़ाइल & बनाना होगा।

वर्तमान प्लगइन निकालें, और इस तरह एक प्रोफाइल में जोड़ें:

<profiles> 
    <profile> 
     <id>release-sign-artifacts</id> 
     <activation> 
      <property> 
       <name>performRelease</name> 
       <value>true</value> 
      </property> 
     </activation> 
     <build> 
      <plugins> 
       <plugin> 
        <groupId>org.apache.maven.plugins</groupId> 
        <artifactId>maven-gpg-plugin</artifactId> 
        <version>1.4</version> 
        <executions> 
         <execution> 
          <id>sign-artifacts</id> 
          <phase>verify</phase> 
          <goals> 
           <goal>sign</goal> 
          </goals> 
         </execution> 
        </executions> 
       </plugin> 
      </plugins> 
     </build> 
    </profile> 
</profiles> 

और फिर जब आप वास्तव में एक रिलीज करने की जरूरत है, अपने mvn आदेश प्रॉपर्टी जोड़ना:

mvn -DperformRelease=true ... 
+1

मान लीजिए कि आप रिलीज प्लगइन का उपयोग कर रहे हैं: ध्वज के माध्यम से सक्रियण का उपयोग करने के बजाय आप उस प्रोफ़ाइल को 'रिलीजप्रोफाइल' प्लगइन सेटिंग में जोड़ सकते हैं। – ankon

+0

वैकल्पिक रूप से आप 'सत्य' के मान के साथ सक्रियण संपत्ति का नाम '$ {env.TRAVIS}' बना सकते हैं। ऐसा इसलिए है क्योंकि ट्रैविस-सीआई कंटेनर विभिन्न अंतर्निहित पर्यावरणीय चर के साथ स्पंज-अप होते हैं (उदाहरण के लिए 'ट्रैविस = सत्य' और 'सीआई = सच्चाई') और मैवेन पर्यावरण चर के लिए मेवेन सिंटैक्स के माध्यम से उन्हें पहचान सकते हैं '$ {env । } '। इस दृष्टिकोण से आपको हर मेवेन कमांड में सिस्टम प्रॉपर्टी जोड़ने की आवश्यकता नहीं है, लेकिन फिर भी आप प्रोफ़ाइल के सक्रियण की नकल करने की अनुमति देते हैं और सीआई बिल्ड के दौरान प्रोफ़ाइल के स्वचालित सक्रियण की अनुमति देते हैं। –

73

अक्षम GPG हस्ताक्षर करने के अपने .travis.yml फ़ाइल में निम्न पंक्ति जोड़कर:

install: mvn install -DskipTests -Dgpg.skip 

ई xample: https://github.com/stefanbirkner/system-rules/blob/master/.travis.yml

+0

मुझे मैवेन और मैसिगिट के साथ अजीब जीजीपी त्रुटियां मिल रही थीं। आपके जवाब ने मेरी मदद की। धन्यवाद – friederbluemle

+4

ध्यान दें कि सीआई बिल्ड के लिए 'skipTests' जोड़ना सबसे अच्छा विचार नहीं हो सकता है। – chrylis

+5

सामान्य में आप सही हैं, लेकिन यहां नहीं ;-) देखें: http://docs.travis-ci.com/user/languages/java/ –

10

मुझे above वर्णित प्रोफ़ाइल के साथ ऐसा करने का थोड़ा आसान तरीका मिला। इसके बजाय एक नया संपत्ति के मूल्य का उपयोग कर के, आप gpg.passphrase संपत्ति जो जब हस्ताक्षर करने के कर वैसे भी प्रदान किया जा करने की आवश्यकता होगी उपयोग कर सकते हैं।

<activation> 
    <property> 
     <name>gpg.passphrase</name> 
    </property> 
</activation> 

ध्यान दें, कि कोई मूल्य नहीं की आवश्यकता है, क्योंकि आप किसी भी मूल्य है कि संपत्ति के लिए सेट कर दिया जाता है, तो इस प्रोफाइल सक्रिय करना चाहते हैं: संशोधित संपत्ति खंड इस प्रकार है।

mvn <command> -Dgpg.passphrase=myverysupersecretpassphrase 

आप इसे निम्नलिखित दो तरीकों चलाकर इस परीक्षण कर सकते हैं::

mvn install 

कोई हस्ताक्षर किए कलाकृतियों उत्पन्न हो, और:

इसी कमांड लाइन तो इस तरह दिखता है

mvn install -Dgpg.passphrase=myverysupersecretpassphrase 

हस्ताक्षर कलाकृतियों बनाया मिलता है।

कलाकृतियों की वास्तविक हस्ताक्षर किए रिलीज करने के लिए निम्न करें:

mvn release:perform -Darguments=-Dgpg.passphrase=myverysupersecretpassphrase 

अविवेक रिहाई कार्रवाई के लिए आवश्यक है, क्योंकि यह पैदा की प्रक्रिया को सीधे आदेश पंक्ति तर्क का प्रचार नहीं करता है (http://maven.apache.org/plugins/maven-gpg-plugin/usage.html देखना)।

+0

यदि आप कमांड इतिहास सहेजते हुए एक खोल का उपयोग कर रहे हैं, तो मैं दृढ़ता से इस दृष्टिकोण के खिलाफ अनुशंसा करता हूं, क्योंकि आप शायद अपने जीपीजी पासफ्रेज को अपनी '~/.bash_history' फ़ाइल या जो भी हो, के आसपास तैरना नहीं चाहते हैं। (एफवाईआई: इन दिनों के बारे में मुझे पता है कि _doesn't_ इतिहास को नियमित डीओएस कमांड प्रॉम्प्ट नहीं है।) –