2012-08-06 21 views
36

में बिल्ड चेंजलॉग तक पहुंच प्राप्त करें मैं जेनकिन्स (एसवीएन पुल से) द्वारा हमारे टेस्टफलाइट नोट्स में जेनरेट किए गए परिवर्तनों की सूची को शामिल करने का तरीका खोजने का प्रयास करने के लिए अपने बालों को खींच रहा हूं। मैं टेस्टफलाइट प्लगइन का उपयोग कर रहा हूं, जिसमें नोट्स के लिए एक फ़ील्ड है - लेकिन ऐसा कोई पैरामीटर/टोकन प्रतीत नहीं होता है जो जेनकिंस उस जानकारी को एम्बेड करने के लिए बनाता है।जेनकींस

क्या किसी ने इस तरह कुछ हासिल करने की कोई किस्मत है?

+0

मुझे एक ही चीज़ की आवश्यकता थी। इस सवाल पूछने के लिए धन्यवाद, और मैं जवाब के लिए और भी आभारी हूं। – makdad

उत्तर

33

ऐसा लगता है कि टेस्टफ्लाइट प्लगइन "बिल्ड नोट्स" फ़ील्ड में रखे गए चर का विस्तार करता है, इसलिए प्रश्न यह है कि हम वर्तमान निर्माण के लिए पर्यावरण चर में परिवर्तन कैसे प्राप्त कर सकते हैं?

जहां तक ​​मुझे पता है, सबवर्जन प्लगइन इस जानकारी को पर्यावरण चर के माध्यम से प्रदान नहीं करता है। हालांकि, सभी जेनकींस एससीएम प्लगइन्स चेंजलॉग जानकारी को एकीकृत करते हैं, क्योंकि आप प्रत्येक निर्माण के लिए वेब यूआई में "परिवर्तन" लिंक के माध्यम से देख सकते हैं।

यह जानकारी जेनकींस एपीआई के माध्यम से भी उपलब्ध है, भले ही निर्माण प्रगति पर है।

उदाहरण के लिए

, तो आप एक "खोल निष्पादित" का निर्माण कदम जहाँ आप इस आदेश चला जोड़ते हैं:

<changes> 
    <comment>First commit.</comment> 
    <comment>Second commit.</comment> 
</changes> 

:

curl -s "http://jenkins/job/my-job/$BUILD_NUMBER/api/xml?wrapper=changes&xpath=//changeSet//comment" 

आप एक XML दस्तावेज इस के समान मिल जाएगा फिर आप इस जानकारी को प्रारूपित कर सकते हैं, हालांकि आप इसे एक पर्यावरण चर में पसंद करते हैं और उसे टेस्टफलाइट "बिल्ड नोट्स" अनुभाग में संदर्भित किया जा सकता है।

हालांकि, निर्माण चरण में एक पर्यावरण चर सेट करना डिफ़ॉल्ट रूप से — द्वारा लगातार नहीं है, इसलिए EnvInject Plugin का उपयोग करने की आवश्यकता है।

इस मामले में, आप एक अस्थायी फ़ाइल में अपने बदलाव का पाठ की तरह सामग्री के साथ लिख सकते हैं:

CHANGELOG="New in this build:\n- First commit.\n- Second commit." 

फिर, Environment Properties File Path विकल्प के साथ एक निर्माण कदम का उपयोग कर इस फ़ाइल को लोड करने से, $CHANGELOG चर मौजूद होगा अपने पर्यावरण में और निर्माण के अंत तक बने रहें, जिससे आप इसे "बिल्ड नोट्स" फ़ील्ड में उपयोग कर सकते हैं।


नोट: मैं TestFlight प्लगइन अपने आप का इस्तेमाल किया है नहीं (हालांकि मैं कोड का शीघ्रता से अवलोकन लिया), और मैं केवल एक Git भंडार के साथ परिवर्तन एपीआई का परीक्षण किया। इसी प्रकार, मैंने परीक्षण नहीं किया कि कैसे EnvInject प्लगइन के साथ newlines एन्कोड किया जाना चाहिए, जिससे मुद्दों का कारण बन सकता है।

+0

आपको बहुत धन्यवाद, क्रिस्टोफर! –

+6

बीटीडब्लू, "फिर आप इस जानकारी को प्रारूपित कर सकते हैं हालांकि आपको पसंद है" - मैंने उपयोग किया: 'sed -e' s/<\/*comment> // g "| sed '/^$/d; जी' एक्सएमएल '' टैग को बाहर निकालने और नई लाइनों को साफ करने के लिए। एस//\ t */जी; एस/<\/*changes> // ग्राम 'sed -e" s/<\/comment> // छ: – makdad

+0

कई परिवर्तन संदेशों के लिए एक साफ उत्पादन प्राप्त करने के लिए, मैं @ makdad की पर इस बदलाव का इस्तेमाल किया "| sed '/^$/d; G'' –

0

टेस्टफ्लाइट प्लगइन के लिए इसका विकल्प है। यहाँ के लिए प्रतिबद्ध है:

https://github.com/jenkinsci/testflight-plugin/commit/e8edfef012d4bdefb95ee24818891a27ac920a36

मैं हाल ही में testflight-प्लगइन विज्ञप्ति में यह नहीं देखा तो मैं Git से प्लगइन का निर्माण किया है और यह इस का विकल्प है।

enter image description here

+0

यह आपकी मदद नहीं करेगा यदि testflight डाउनस्ट्रीम प्रोजेक्ट के रूप में चलता है। –

4

मैं उपयोग कर रहा हूँ यह एक पाई गई: http://jenkins.361315.n4.nabble.com/Get-SVN-changes-td3511042.html

${CHANGES, showPaths=true} 

बहुत ही सरल और यह SVN के लिए काम करता है।

+2

यह ईमेल-आउट प्लगइन की एक विशेषता प्रतीत होता है, इसलिए यह किसी ईमेल में चेंजलॉग भेजने के लिए काम करेगा, लेकिन कहीं और नहीं। प्रमाणीकरण के साथ जेनकिंस सर्वर के लिए –

2

मैं कुछ अजगर उदाहरण जो एक्सएमएल बदलाव करने के लिए coverts बनाया

note.xml होना चाहिए नीचे

from xml.etree.ElementTree import parse 
tree = parse("note.xml") 
root = tree.getroot() 
sentence = 'CHANGELOG =\"' 
cnt = 1 
for element in root.findall('msg'): 
    tempstring = element.text 
    tempstring =str(cnt)+'. '+'\\n'.join(tempstring.splitlines()) 
    sentence =sentence +tempstring +'\\n' 
    cnt = cnt +1 
sentence = sentence + '\"' 
print sentence 
7

यह देखते हुए कि जेनकींस लॉग प्रारूप बदल

<changes> 
     <msg>First commit.</msg> 
     <msg>Second commit.</msg> 
</changes> 

वास्तविक अजगर कोड है, मैं मूल पोस्ट से एक्सएमएल सामग्री अद्यतन। इसके अलावा, चूंकि मूल टेस्टफलाइट की मृत्यु हो गई, और प्लगइन अब अप्रचलित है, इसलिए मैं हॉकीकिट के उपयोग के लिए सामग्री को HTML फ़ाइल में बदल रहा हूं। यह लाइन ब्रेक के साथ वास्तव में एक पाठ फ़ाइल है। Sed insert line breaks बनाना .. challenging है, और स्ट्रिंग एक नज़र में बहुत भ्रमित (कम से कम मेरे लिए) लग रहा है।

#for distribution in projects 
Changelog=$(curl "${BUILD_URL}api/xml?wrapper=changes&xpath=//changeSet//item//msg" | sed -e "s/<\/msg>//g; s/<msg>/\\`echo -e '\r'`/g; s/<\/*changes>//g") 

# Write result to properties file 
echo -e "$Changelog" > "${BuildDestinationPath}/"${BUILD_NUMBER}.html 

नोट संपादित करें: BuildDestinationPath और Changelog मेरे स्थानीय चर हैं। कैप्स में वेरिएबल जेनकींस पर्यावरण चर हैं और किसी भी इंस्टालेशन पर मौजूद होना चाहिए।

+0

कर्ल भाग अलग होना चाहिए –

2

असल में, आप निर्माण फ़ोल्डर के अंदर ../builds/$BUILD_NUMBER/changelog.xml फ़ाइल को पढ़ने/पार्स करके बिल्ड चरण खत्म होने से पहले उस जानकारी तक पहुंच सकते हैं। यह फ़ाइल एसवीएन/जीआईटी प्रतिबद्धता के साथ बनाई गई है, न कि निर्माण या post_build चरण के अंत के साथ। इसका मतलब है, आप एक ही नौकरी के निर्माण चरण की शुरुआत में एक स्क्रिप्ट के साथ इसे पार्स कर सकते हैं और एनवी चर में डेटा डालेंगे।

यह है कि आप कर्ल और एक्सएमएल का उपयोग नहीं करना चाहते हैं।