2016-09-12 9 views
11

गिट रिपॉजिटरीज़ के भीतर जेनकींस कॉन्फ़िगरेशन को एकीकृत करने में सक्षम होने के लिए मैंने pipeline feature का उपयोग करके कुछ पुराने जेनकींस नौकरियों को नए लोगों में स्थानांतरित कर दिया है। यह ठीक काम कर रहा है लेकिन मैं खुद से पूछ रहा हूं कि इमारत के दौरान होने वाले चेकआउट की संख्या को कम करने का कोई तरीका है या नहीं।जेनकींस पाइपलाइन: क्या एकाधिक चेकआउट से बचना संभव है?

सेटअप

  • मैं एक जेनकींस multibranch काम जो मेरे Git भंडार से संबंधित है
  • मैं अपने Git भंडार

    #!groovy 
    node { 
    
        stage 'Checkout' 
        checkout scm 
    
        // build project 
        stage 'Build' 
        ... 
    } 
    

समस्या में एक Jenkinsfile है है

जब मैं अपने दूरस्थ branche BRANCH_1 करने के लिए धक्का, multibranch जेनकींस काम शुरू हो रहा है और मैं समझता हूँ कि निम्न चरणों का पालन होता है:

  • multibranch काम शाखा अनुक्रमण के लिए एक git fetch बनाता है और काम चलाता है मेरे दूरस्थ शाखा करने के लिए इसी: BRANCH_1_job
  • BRANCH_1_job ट्रिगर शाखा के Jenkinsfile पुनः प्राप्त करने के एक git checkout बनाता
  • जेनकिन्सफाइल को निष्पादित किया गया है और checkout scm स्वयं बनाता है। अगर मैं ऐसा नहीं करता, तो मैं अपनी परियोजना नहीं बना सकता क्योंकि कोई स्रोत उपलब्ध नहीं है।

तो मेरी शाखा बनाने के लिए, मैं एक git fetch और दो git checkout के साथ समाप्त होता हूं।

प्रश्न

  • मैं इस प्रक्रिया सही ढंग से समझ है? या किसी को याद किया था?
  • git checkout की संख्या को कम करने का कोई तरीका है? जब मैं official examples की जांच करता हूं, तो वे सभी पहले चरण के रूप में चेकआउट एसएमएम बनाते हैं। मैं व्यक्तिगत रूप से सोचता हूं कि मुझे ऐसा करने की ज़रूरत नहीं है क्योंकि जेनकिन्स नौकरी को जेनकिन्सफाइल को पुनः प्राप्त करने के लिए पहले से ही चेकआउट करना पड़ा था (इसलिए मेरे स्रोत किसी भी तरह से यहां होना चाहिए)।
  • क्या आपको नहीं लगता कि गिट रेपो में बड़ी संख्या में रेफरी होने पर इन एकाधिक चेकआउट खराब प्रदर्शन कर सकते हैं?

धन्यवाद आप सभी

+1

यदि आप बहु-शाखा पाइपलाइन का उपयोग करने पर सेट नहीं हैं, तो आप जेनकिन्स में 'जेनकिन्सफाइल' के साथ एक सामान्य (एकल शाखा) पाइपलाइन नौकरी बना सकते हैं जो एक चेकआउट करता है और फिर चेक से आपकी वास्तविक बिल्ड स्क्रिप्ट लोड करता है 'लोड' ci/build-script-in-your-repo.gy'' के माध्यम से बाहर भंडार। दुर्भाग्य से, आप उस मामले में प्रत्येक शाखा के लिए अलग-अलग नौकरियों को खो देंगे। – Carsten

+1

मैं जानता हूँ कि तुम क्या मतलब है, लेकिन मैं करना चाहते हैं: - नौकरी विन्यास मेरे भंडार में और मेरे जेनकींस में नहीं मेरी ci config रखने - (शाखा प्रति एक नौकरी की तरह अच्छा multibranch सुविधाओं का उपयोग, इसलिए भी आसानी से देख सकते हैं जो शाखा असफल हो रही है) – Bastien

उत्तर

5
सादा Git जेनकींस दो checkouts करना है के साथ

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

यदि आप बिटबकेट या गिटहब पर गिट होस्ट करते हैं तो आप मल्टीब्रैंच प्लगइन के बजाय अपने विशिष्ट जेनकींस प्लगइन का उपयोग करके डबल चेकआउट से बचें।

Bitbucket और GitHub प्लगइन के अनुसार जेनकींस प्लगइन साइट देखें।

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

+0

स्पष्टीकरण के लिए धन्यवाद। मैं जेनकींस बिटबकेट प्लगइन की जांच करूंगा – Bastien

+0

क्या पूरे संगठन को स्कैन किए बिना जिथब प्लगइन का उपयोग करने का कोई तरीका है? मैं कम चेकआउट से लाभ लेना चाहता हूं, लेकिन मेरे पास संगठन में हर रेपो स्कैन नहीं किया जा सकता है ... –

+0

यह सच गिट एक फ़ाइल की चेकआउट की अनुमति नहीं देता है। हालांकि कोई भी एक फ़ाइल को "चेकआउट" करने के लिए गिट आर्काइव का उपयोग कर सकता है। मैं अपनी जेनकींस पाइपलाइन में एक फ़ाइल को चेकआउट करने के लिए ऐसा कुछ उपयोग कर रहा हूं: sh "git archive --remote = ssh: // $ {gitUser} @ $ {gitServer}/$ {view}/$ {someProject} .git $ {env.BRANCH} - $ {specFile} | tar xf - " – DJViking

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