2017-02-12 8 views
8

में डॉकरफ़ाइल से निर्मित मैं जेनकींस के आधार पर निरंतर एकीकरण मंच को तैनात करना चाहता हूं। चूंकि मेरे पास विभिन्न प्रकार की परियोजनाएं हैं (PHP/सिम्फनी, नोड, कोणीय, ...) और जैसा कि मैं चाहता हूं कि ये परीक्षण स्थानीय और जेनकींस दोनों पर चलें, मैं डॉकर्स कंटेनर का उपयोग करने के बारे में सोच रहा था।डॉकर कंटेनर में जेनकींस परीक्षण चलाना कोडबेस

प्रक्रिया मैं के लिए लक्ष्य कर रहा हूँ है:

  • एक मर्ज अनुरोध Github/Gitlab पर खोला जाता है
  • एक webhook मर्ज अनुरोध
  • जेनकींस रेपो खींचती की जेनकींस सूचित करता है, कंटेनर बनाता है और परीक्षण
  • निष्पादित करने के लिए एक शेल स्क्रिप्ट चलाता है एक बार परीक्षण समाप्त होने के बाद, जेनकिंस कंटेनरों में से एक (साझा मात्रा के माध्यम से) परिणामों को पुनर्प्राप्त करता है और परिणामों को संसाधित करता है।

मैं नहीं चाहता कि जेनकिंस एक कंटेनर में हों।

इस तरह की प्रक्रिया के साथ, मैं उम्मीद कर रहा हूं कि प्रत्येक डेवलपर मशीन पर docker-composer up और फिर कंटेनर ./tests all में से किसी एक के साथ परीक्षणों को आसानी से चलाने में सक्षम होने की उम्मीद है।

मैं जेनकींस से बहुत परिचित नहीं हूं। मैंने बहुत सारे दस्तावेज पढ़े हैं, लेकिन उनमें से ज्यादातर ने पहले से ही प्रत्येक तरह की परियोजनाओं के लिए जेनकिन्स गुलामों को परिभाषित करने का सुझाव दिया है। मैं सबकुछ जितना संभव हो उतना गतिशील होना चाहता हूं और जितना संभव हो जेनकींस पर कम विन्यास की आवश्यकता है।

यदि आपने कभी कुछ ऐसा ही लागू किया है तो मैं आपकी परीक्षण प्रक्रिया के विवरण की सराहना करता हूं। यदि आपको लगता है कि मैं जो लक्ष्य कर रहा हूं वह असंभव है, तो मैं भी सराहना करता हूं अगर आप मुझे समझा सकते हैं।

उत्तर

3

एक सेटअप जो मैं सुझाव देता हूं वह डॉकर में डॉकर है।

आधार एक व्युत्पन्न डॉकर छवि है, जो डॉकर कमांडलाइन क्लाइंट जोड़कर jenkins:2.x छवि को बढ़ाता है। जेनकींस अपने घर फ़ोल्डर (एक फ़ोल्डर उदा।/Var/jenkins_home डॉकर होस्ट से घुड़सवार) के साथ एक कंटेनर के रूप में शुरू किया गया है और डॉकर सॉकेट फ़ाइल जेनकींस बिल्ड नौकरियों से डॉकर कंटेनर शुरू करने में सक्षम होने के लिए है।

docker run -d --name jenkins -v /var/jenkins_home:/var/jenkins_home -v /var/run/docker.sock:/var/run/docker.sock ... <yourDerivedJenkinsImage> 

जाँच करने के लिए, अगर इस स्थापना सिर्फ काम कर रहा है जेनकींस कंटेनर शुरू करने के बाद निम्न आदेश निष्पादित करें:

:

docker exec jenkins docker version 

"डोकर संस्करण" उत्पादन नहीं शो करता है

क्या इस होस्ट पर डॉकर डिमन चल रहा है?

हरथिन ठीक है।

अपनी बिल्डिंग नौकरियों में, आप ऊपर बताई गई प्रक्रिया को कॉन्फ़िगर कर सकते हैं। जेनकींस को बस भंडार की जांच करें। भंडार में आपके निर्माण और परीक्षण स्क्रिप्ट शामिल होनी चाहिए।

शैल निष्पादन के साथ एक फ्रीस्टाइल बिल्ड जॉब का उपयोग करें।एक खोल निष्पादन ऐसा दिखाई दे सकता:

docker run --rm --volumes-from jenkins <yourImageToBuildAndTestTheProject> bash $WORKSPACE/<pathToYourProjectWithinTheGitRepository>/build.sh 

यह आदेश बस एक नया कंटेनर (निर्माण और/या अपनी परियोजना का परीक्षण करने) जेनकींस से संस्करणों के साथ शुरू होता है। जिसका मतलब है कि क्लोन रिपोजिटरी $ WORKSPACE के तहत उपलब्ध होगी। तो यदि आप "$ bash $ WORKSPACE/<pathToYourProjectWithinTheGitRepository> /build.sh" चलाते हैं तो आपकी परियोजना "yourImageToBuildAndTestTheProject" के कंटेनर के भीतर बनाई जाएगी। इसे चलाने के बाद, आप एकीकरण परीक्षण के लिए अन्य कंटेनर शुरू कर सकते हैं या व्युत्पन्न जेनकिन्स छवि पर इसे इंस्टॉल करके इसे "डॉकर-कंपोज़" के साथ जोड़ सकते हैं।

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

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

अपने निर्माण कार्य की खोल निष्पादन के भीतर इस डोकर विकल्प का उपयोग करना:

--volumes-from jenkins 

स्वचालित रूप से अपने निर्माण नौकरियों में से प्रत्येक के कार्यक्षेत्र और विन्यास फाइल कहते हैं।

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