2012-07-18 26 views
11

मैं जेनकींस चला रहा हूं और मैंने इसे अपने गीथब खाते के साथ सफलतापूर्वक काम किया है, लेकिन मैं इसे अमेज़ॅन एस 3 के साथ सही तरीके से काम नहीं कर सकता।जेनकिन्स अमेज़ॅन एस 3 के साथ सतत एकीकरण - सब कुछ रूट पर अपलोड हो रहा है?

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

क्या फ़ोल्डर संरचना को अपलोड और बनाए रखने के लिए S3 प्लगइन प्राप्त करना संभव है?

उत्तर

15

ऐसा लगता है कि यह संभव नहीं है। इसके बजाय, मैं ऐसा करने के लिए s3cmd का उपयोग कर रहा हूँ। आपको सबसे पहले एक जेनकींस काम के भीतर पार्टी लिपियों आप उपयोग कर सकते हैं में से एक में अपने सर्वर पर स्थापित करना होगा, और उसके बाद:

s3cmd sync -r -P $WORKSPACE/ s3://YOUR_BUCKET_NAME 

कि फ़ोल्डर संरचना को बनाए रखने के अपने S3 खाते में फ़ाइलों के सभी कॉपी कर देंगे। -पी सभी के लिए पढ़ने की अनुमति रखता है (यदि आप अपनी बाल्टी को वेब सर्वर के रूप में उपयोग कर रहे हैं तो आवश्यक है)। सिंक सुविधा का उपयोग करके यह एक अच्छा समाधान है, क्योंकि यह आपकी सभी स्थानीय फाइलों को एस 3 बाल्टी के विरुद्ध तुलना करता है और केवल फाइलों को प्रतिलिपि बनाता है (फ़ाइल आकार और चेकसम की तुलना करके)।

+1

पर जायेगा, मैं टी का उपयोग करने का सुझाव दूंगा वह अब JClouds प्लग। – Aron

+0

जेक्लाउड्स भी महान नहीं है; यह स्ट्रीमिंग के बारे में एक अस्पष्ट त्रुटि के साथ विफल रहता रहता है। इसके लिए एक सीएलआई उपकरण में फॉलबैक होने के कारण ... – aendrew

+0

s3cmd इष्टतम नहीं है क्योंकि इसे aws क्रेडेंशियल्स के लिए एक अलग स्टोर की आवश्यकता है। एस 3 प्लगइन के प्रमाणीकरण के लिए एस 3 प्रोफाइल के उपयोग की योग्यता है। सहमत हैं कि आर्टिफैक्ट पदानुक्रम को संरक्षित करना वर्तमान व्यवहार के लिए बेहतर होगा। –

3

मैंने कभी जेनकिंस के लिए एस 3 प्लगइन के साथ काम नहीं किया है (लेकिन अब जब मुझे पता है कि यह अस्तित्व में है, तो मैं इसे आज़मा सकता हूं), हालांकि, कोड को देखते हुए, ऐसा लगता है कि आप केवल वही काम कर सकते हैं जो आप कामकाज का उपयोग करना चाहते हैं ।

यहाँ क्या वास्तविक प्लगइन कोड है (GitHub से लिया गया) --I कोड के कुछ हिस्सों कि पठनीयता के कारण प्रासंगिक नहीं हैं हटाया:

वर्ग hudson.plugins.s3.S3Profile, विधि upload:

final Destination dest = new Destination(bucketName,filePath.getName()); 
getClient().putObject(dest.bucketName, dest.objectName, filePath.read(), metadata); 

अब अगर आप hudson.FilePath.getName() के JavaDoc में एक बार देख ले:

निर्देशिका के बिना सिर्फ फ़ाइल नाम भाग हो जाता है।

public Destination(final String userBucketName, final String fileName) { 

    if (userBucketName == null || fileName == null) 
     throw new IllegalArgumentException("Not defined for null parameters: "+userBucketName+","+fileName); 

    final String[] bucketNameArray = userBucketName.split("/", 2); 
    bucketName = bucketNameArray[0]; 
    if (bucketNameArray.length > 1) { 
     objectName = bucketNameArray[1] + "/" + fileName; 
    } else { 
     objectName = fileName; 
    } 
} 

Destination वर्ग JavaDoc का कहना है::

अब, hudson.plugins.s3.Destination के निर्माता में एक बार देख ले

सम्मेलन यहां लागू किया है कि एक/में एक बाल्टी नाम है ऑब्जेक्ट नाम में संरचना बनाने के लिए प्रयोग किया जाता है। यही है, "mybucket/v1" के बाल्टी नाम में file.txt का एक पुट Mybucket में ऑब्जेक्ट "v1/file.txt" बनाया जाएगा।

निष्कर्ष: filePath.getName() कॉल स्ट्रिप्स किसी भी उपसर्ग बंद (S3 किसी भी निर्देशिका नहीं है, बल्कि उपसर्गों, अधिक जानकारी के लिए this और this धागे देखें) आप फ़ाइल में जोड़ें। यदि आपको वास्तव में अपनी फ़ाइलों को "फ़ोल्डर" में रखना है (यानी एक विशिष्ट उपसर्ग जिसमें स्लैश (/) शामिल है), तो मैं आपको सुझाव देता हूं कि आप इस उपसर्ग को अपने बाल्टी नाम के अंत में जोड़ दें, जैसा कि Destination क्लास जावाडॉक में बताया गया है ।

1

हाँ यह संभव है।

यह प्रत्येक फ़ोल्डर गंतव्य के लिए की तरह लग रहा है, तो आप फिर भी S3 प्लगइन का एक अलग इंस्टेंस की आवश्यकता होगी।

"स्रोत" फ़ाइल को अपलोड कर रहे है।

"गंतव्य बाल्टी" जहाँ आप अपने पथ जगह है।

+0

यह पूरी तरह से रिकर्सिव नहीं है, लेकिन आप एस 3 बाल्टी के भीतर एक उपनिर्देशिका में अपलोड कर सकते हैं। –

1

जेनकींस 1.532.2 और S3 प्रकाशक प्लग-इन 0.5 का उपयोग करना, यूआई कॉन्फ़िगर नौकरी स्क्रीन अतिरिक्त S3 प्रकाशित प्रविष्टियों को खारिज कर दिया। वहाँ भी यदि प्लगइन कार्यक्षेत्र निर्देशिका संरचना निर्मित के रूप में हम बनाने के लिए कई निर्देशिकाओं होगा हमारे लिए एक महत्वपूर्ण रखरखाव लाभ होगा।

+1

कि प्लगइन खराब नहीं है! यह एक फ़ाइल अपलोड के लिए ठीक है लेकिन यह निर्देशिका संरचना नहीं रखता है। – mohamnag

1
  1. अपना Git प्लगइन सेट करें।

enter image description here

  1. अपने बैश स्क्रिप्ट
सेट करें

enter image description here

  1. सभी अपने फ़ोल्डर में चिह्नित चूंकि "*" बाल्टी