मुख्य सामग्री पर जाएं
डेटा इंजीनियरिंग

Jenkins इंटरव्यू प्रश्न 2026: शुरुआती से उन्नत स्तर तक

अपने इंटरव्यू के लिए तैयार हों—Jenkins इंटरव्यू प्रश्न: “यह क्या है?” से लेकर बड़े पैमाने पर चलाने तक—पाइपलाइंस, एजेंट्स, क्रेडेंशियल्स, प्लगइन्स, और फेल्योर रिकवरी।
Josep Ferrer's photo
Josep Ferrer
अपडेट किया गया · 15 मि॰ पढ़ें

AI के साथ खोजें

ChatGPTClaudePerplexity

अपना निःशुल्क खाता बनाएँ

अभ्यास और ट्रैक अपनी प्रगति को।

Google के साथ जारी रखें
जारी रखने पर, आप हमारी उपयोग की शर्तें, हमारी गोपनीयता नीति को स्वीकार करते हैं और यह भी कि आपका डेटा संयुक्त राज्य अमेरिका में संग्रहीत किया जाता है।

पिछले एक दशक से अधिक समय से Jenkins CI/CD पाइपलाइंस का केंद्र रहा है, यही वजह है कि यह DevOps इंटरव्यूज़ में लगातार सामने आता है। इसे अच्छी तरह जानना इंटरव्यूअर्स को एक खास संकेत देता है: कि आपने वास्तविक परिस्थितियों में सॉफ्टवेयर शिप किया है, न कि केवल टूलिंग का सैद्धांतिक अध्ययन किया है।

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

यदि आप Jenkins में नए हैं और इंटरव्यू परिदृश्यों में जाने से पहले हैंड्स-ऑन वॉकथ्रू चाहते हैं, तो हमारा MLOps के लिए Jenkins ट्यूटोरियल इंस्टॉलेशन, पाइपलाइंस और कोर अवधारणाओं को व्यावहारिक उदाहरणों के साथ कवर करता है।

शुरुआती स्तर के Jenkins इंटरव्यू प्रश्न

शुरुआती स्तर पर, इंटरव्यूअर्स वर्षों के प्रोडक्शन अनुभव की उम्मीद नहीं करते। यहां वैचारिक स्पष्टता परिचालन गहराई से अधिक मायने रखती है। क्या आप समझा सकते हैं कि Jenkins क्या करता है, यह क्यों मौजूद है, और इसके मुख्य घटक एक-दूसरे से कैसे संबंधित हैं?

Jenkins क्या है, और यह किस समस्या का समाधान करता है?

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

Jenkins पूरे चक्र को ऑटोमेट करता है ताकि प्रत्येक कोड बदलाव पर स्वतः ट्रिगर हो, जिसका मतलब है कि इंटीग्रेशन समस्याएं जल्दी सामने आती हैं, हफ्तों तक जमा नहीं होतीं जब तक कोई नोटिस करे।

CI/CD का क्या अर्थ है?

CI का मतलब Continuous Integration है: डेवलपर्स नियमित रूप से अपना कोड एक साझा ब्रांच में मर्ज करते हैं, और हर मर्ज एक स्वचालित बिल्ड और टेस्ट रन को ट्रिगर करता है। इस तरह समस्याएं जमा होने से पहले ही सामने आ जाती हैं और उलझन बनने से बचती हैं।

CD दो संबंधित अवधारणाओं को कवर करता है जिन्हें अक्सर साथ में रखा जाता है: 

  • Continuous Delivery यह सुनिश्चित करता है कि हर पासिंग बिल्ड किसी भी समय डिप्लॉय होने की स्थिति में रहे।
  • Continuous Deployment एक कदम और आगे बढ़ता है, पासिंग बिल्ड्स को बिना मैनुअल अप्रूवल गेट के अपने आप प्रोडक्शन में पुश करता है। 

Jenkins इन दोनों पैटर्न्स को सपोर्ट करता है, और कोई संगठन ऑटोमेशन की रेखा कहां खींचता है, यह आमतौर पर उनके जोखिम सहिष्णुता और रिलीज़ प्रक्रिया पर निर्भर करता है।

Jenkins जॉब क्या है?

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

Jenkinsfile क्या है, और व्यवहार में यह क्यों महत्वपूर्ण है?

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

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

Freestyle जॉब और Pipeline जॉब में क्या अंतर है?

Freestyle पुराना मॉडल है, जिसमें बिल्ड स्टेप्स Jenkins वेब इंटरफेस के माध्यम से कॉन्फ़िगर होते हैं। शुरुआत करना आसान है, लेकिन कॉन्फ़िगरेशन Jenkins में रहता है न कि सोर्स कंट्रोल में, इसलिए बिल्ड सेटिंग्स का कोई वर्ज़न इतिहास नहीं होता और बदलाव होने पर कोड रिव्यू भी नहीं।

Pipeline जॉब्स बिल्ड लॉजिक को Jenkinsfile में स्टोर करते हैं, समानांतर निष्पादन और कंडीशनल लॉजिक सहित जटिल वर्कफ़्लो का समर्थन करते हैं, और बड़ी टीमों में कहीं अधिक साफ़-सुथरे ढंग से स्केल होते हैं। बेसिक बिल्ड-एंड-टेस्ट चक्र से आगे की किसी भी चीज़ के लिए, अब पाइपलाइंस मानक दृष्टिकोण हैं।

प्लगइन्स क्या भूमिका निभाते हैं?

Jenkins एक न्यूनतम कोर के साथ आता है, और लगभग बाकी सब प्लगइन्स के माध्यम से दिया जाता है। Git, Docker, Kubernetes, Slack, Artifactory, SonarQube और सैकड़ों अन्य टूल्स के इंटीग्रेशन्स, साथ ही अतिरिक्त स्टेप टाइप्स और ट्रिगर मैकेनिज़्म, सभी प्लगइन सिस्टम के माध्यम से आते हैं।

प्लगइन इकोसिस्टम एक बड़ा कारण है कि Jenkins इतने लंबे समय तक प्रासंगिक बना रहा, हालांकि इसका मतलब यह भी है कि बड़े वातावरणों में प्लगइन मैनेजमेंट एक वास्तविक परिचालन चिंता बन जाता है, जहाँ अनुकूलता, सुरक्षा पैच और वर्ज़न पिनिंग पर ध्यान देना पड़ता है।

SCM पोलिंग और वेबहुक्स में व्यावहारिक अंतर क्या है?

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

वेबहुक्स उस संबंध की दिशा उलट देते हैं: जैसे ही पुश होता है, रिपॉजिटरी Jenkins को सूचना भेजती है, जिससे ट्रिगर तात्कालिक और कहीं अधिक कुशल हो जाता है। प्रोडक्शन सेटअप्स के लिए, वेबहुक्स मानक विकल्प हैं।

मध्यम स्तर के Jenkins इंटरव्यू प्रश्न

मध्यम स्तर के प्रश्न मानते हैं कि आपने पाइपलाइंस लिखी हैं और Jenkins को वास्तविक सिस्टम्स से जोड़ा है। इंटरव्यूअर्स यह देखना चाहते हैं कि आपके पास व्यावहारिक अनुभव है और आप कुछ डिजाइन निर्णयों के पीछे के कारणों को समझते हैं, न कि केवल यह कि आपने टूल का उपयोग किया है।

डिक्लेरेटिव बनाम स्क्रिप्टेड पाइपलाइंस: वास्तव में क्या मायने रखता है?

दोनों Groovy का उपयोग करते हैं और दोनों Jenkinsfile में रहते हैं, इसलिए भेद वास्तव में संरचना और उससे जुड़े समझौतों के बारे में है। 

  • डिक्लेरेटिव पाइपलाइन निर्धारित निर्देशों—pipeline, agent, stages, steps—के माध्यम से एक विशिष्ट संरचना लागू करती है। यह बाधा अधिकांश टीमों के लिए सहायक साबित होती है क्योंकि पाइपलाइंस पढ़ने में आसान, रन से पहले वैलिडेट करने में सरल, और उन डेवलपर्स के लिए अधिक सुलभ हो जाती हैं जो Groovy से गहराई से परिचित नहीं हैं। 
  • स्क्रिप्टेड पाइपलाइन मूलतः Groovy है जिसमें Jenkins DSL तक पूर्ण पहुंच होती है, जो लगभग कुछ भी व्यक्त करने के लिए पर्याप्त लचीली है, लेकिन अक्सर जटिल लॉजिक पैदा करती है जिसे किसी और के लिए मेंटेन करना कठिन हो जाता है। 

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

मल्टीब्रांच पाइपलाइंस क्या हैं?

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

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

Jenkins में डिस्ट्रीब्यूटेड बिल्ड्स कैसे काम करते हैं?

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

जब कोई पाइपलाइन चलती है, Jenkins लेबल मैचिंग के आधार पर स्टेजेज़ को एजेंट्स पर रूट करता है: Docker की आवश्यकता वाला स्टेज "docker" लेबल वाले एजेंट्स पर जाता है, जबकि Windows की आवश्यकता वाला स्टेज Windows एजेंट पर रूट होगा। यह सेटअप आपको मशीनों में काम को समानांतर करने, प्रति बिल्ड वातावरण को अलग-थलग करने, और संसाधन-गहन कंप्यूटेशन को कंट्रोलर से दूर रखने की अनुमति देता है।

Jenkins पाइपलाइंस में क्रेडेंशियल्स को कैसे संभालना चाहिए?

Jenkins में पासवर्ड्स, SSH कुंजियाँ, API टोकन्स और सीक्रेट फ़ाइलों के लिए बिल्ट-इन क्रेडेंशियल स्टोर शामिल है। पाइपलाइंस इन्हें आईडी द्वारा credentials() हेल्पर या withCredentials ब्लॉक के माध्यम से संदर्भित करती हैं, जो सीक्रेट्स को कंसोल आउटपुट में लिखे बिना बिल्ड एनवायरनमेंट में इंजेक्ट करता है।

कठोर आवश्यकताओं वाले संगठनों के लिए, HashiCorp Vault प्लगइन पाइपलाइंस को रनटाइम पर अल्प-आयु क्रेडेंशियल्स फ़ेच करने देता है, बजाय इसके कि Jenkins में दीर्घ-आयु सीक्रेट्स स्टोर किए जाएँ—जो कि समझौता किए गए कंट्रोलर से होने वाले नुकसान को सीमित करता है।

असमझौता नियम यह है कि सीक्रेट्स कभी भी Jenkinsfile में हार्डकोड नहीं होने चाहिए, चाहे क्रेडेंशियल स्टोरेज के बारे में अन्य कोई भी विकल्प क्यों न चुना जाए।

पैरामीटराइज़्ड बिल्ड्स क्या हैं?

पैरामीटराइज़्ड बिल्ड्स आपको Jenkinsfile बदले बिना रनटाइम वैल्यूज़ को पाइपलाइन में पास करने की अनुमति देते हैं।

स्ट्रिंग पैरामीटर्स वर्ज़न नंबर या ब्रांच नाम जैसी चीज़ें संभालते हैं, बूलियन विशेष स्टेजेज़ को ऑन या ऑफ कर सकते हैं, और चॉइस पैरामीटर्स यूज़र्स को प्री-डिफाइंड सूची से डिप्लॉयमेंट टारगेट चुनने देते हैं। पैरामीटर्स "Build with Parameters" UI में दिखते हैं और पाइपलाइन के अंदर एनवायरनमेंट वेरिएबल्स के रूप में उपलब्ध रहते हैं।

व्यावहारिक मूल्य यह है कि एक ही Jenkinsfile कई वातावरणों की सेवा कर सकता है, बिना प्रत्येक के लिए पाइपलाइन कोड डुप्लिकेट किए।

शेयर्ड लाइब्रेरियाँ क्या हैं, और टीमें उन पर निवेश क्यों करती हैं?

शेयर्ड लाइब्रेरियाँ पुन:उपयोग योग्य पाइपलाइन लॉजिक को अलग रिपॉजिटरी में रहने देती हैं, जहाँ से उन्हें कई अलग-अलग प्रोजेक्ट्स के Jenkinsfiles से कॉल किया जा सकता है।

एक दर्जन Jenkinsfiles में वही Docker बिल्ड-एंड-पुश सीक्वेंस लिखने के बजाय, आप इसे एक बार शेयर्ड लाइब्रेरी में लिखते हैं और हर टीम एक ही लाइन से उसे कॉल करती है। व्यक्तिगत Jenkinsfiles साफ़ और पठनीय रहते हैं, जो भी प्रोजेक्ट्स लाइब्रेरी का उपयोग करते हैं उनके बीच लॉजिक सुसंगत रहता है, और शेयर्ड लाइब्रेरी में किया गया फ़िक्स तुरंत सभी उपभोक्ताओं तक पहुँच जाता है।

लाइब्रेरियों को विशिष्ट वर्ज़न्स पर पिन भी किया जा सकता है, जो खासकर तब महत्वपूर्ण होता है जब शेयर्ड लाइब्रेरी सक्रिय रूप से बदल रही हो और आपको प्रोडक्शन पाइपलाइंस को स्थिर रखना हो।

आप एक फेल होती Jenkins पाइपलाइन को कैसे अप्रोच करते हैं?

कंसोल आउटपुट पहली जगह है जहाँ देखना चाहिए। Jenkins हर स्टेप को उसके एग्जिट कोड और पूर्ण आउटपुट के साथ लॉग करता है, और विफलता आमतौर पर वहीं सीधे दिखाई देती है।

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

अंतराल पर होने वाली विफलताओं के लिए, timestamps() रैपर जोड़ना और यह देखना कि व्यक्तिगत स्टेप्स में कितना समय लग रहा है, अक्सर समस्या को उजागर करता है: धीमी नेटवर्क कॉल या बाहरी सेवा पर इंतज़ार करना टाइमिंग में स्पष्ट रूप से दिखता है।

जब बिल्ड लोकली पास होता है लेकिन Jenkins में फेल, तो कारण लगभग हमेशा पर्यावरणीय होता है, और सबसे विश्वसनीय दृष्टिकोण वही Docker इमेज का उपयोग करके एजेंट एनवायरनमेंट को लोकली पुन:निर्मित करना है जो एजेंट उपयोग करता है।

Git और Docker इंटीग्रेशन व्यवहार में कैसे काम करता है?

Git इंटीग्रेशन आम तौर पर Git प्लगइन या GitHub और GitLab ब्रांच सोर्स प्लगइन्स के माध्यम से आता है। आप रिपॉजिटरी URL और क्रेडेंशियल्स को पाइपलाइन या मल्टीब्रांच जॉब सेटअप में कॉन्फ़िगर करते हैं, और Jenkins किसी भी स्टेज चलाने से पहले क्लोन संभालता है।

Docker इंटीग्रेशन आपकी आवश्यकता के अनुसार दो मोड्स में चलता है। आप docker.image().inside() के साथ कंटेनर्स के अंदर पाइपलाइन स्टेप्स चलाकर Docker को बिल्ड एनवायरनमेंट के रूप में उपयोग कर सकते हैं, या आप docker.build() और docker.push() के साथ Docker इमेजेज़ को स्पष्ट पाइपलाइन स्टेप्स के रूप में बिल्ड और पुश कर सकते हैं।

जब Docker इंस्टॉल हो तो एजेंट्स Docker को नैटिव रूप से चलाते हैं, और Docker Pipeline प्लगइन दोनों इंटीग्रेशन मोड्स के डिक्लेरेटिव पक्ष को संभालता है।

उन्नत Jenkins इंटरव्यू प्रश्न

उन्नत प्रश्न आर्किटेक्चरल निर्णय और परिचालन अनुभव के बारे में होते हैं। इंटरव्यूअर्स समझना चाहते हैं कि क्या आपने बड़े पैमाने पर Jenkins के बारे में वास्तविक निर्णय लिए हैं, उसे प्रोडक्शन दबाव में संचालित किया है, और जुड़े हुए समझौतों को समझा है।

आप Jenkins को कई नोड्स में कैसे स्केल करते हैं?

एजेंट नोड्स को प्रबंधित करने के दो व्यापक तरीके हैं: स्टैटिक एजेंट्स, जो Jenkins में स्थायी रूप से पंजीकृत रहती मशीनें होती हैं; और डायनेमिक एजेंट्स, जो ऑन-डिमांड प्रोविज़न होते हैं और बिल्ड खत्म होने पर नष्ट कर दिए जाते हैं।

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

आज डायनेमिक एजेंट्स के लिए मानक इम्प्लीमेंटेशन Kubernetes प्लगइन है: Jenkins क्लस्टर में एक पॉड के रूप में चलता है, और एजेंट पॉड्स प्रति बिल्ड पोड टेम्पलेट्स के आधार पर प्रोविज़न होते हैं जो आवश्यक कंटेनर्स और टूल्स को परिभाषित करते हैं। बिल्ड खत्म होने पर पॉड गायब हो जाता है।

कंट्रोलर बनाम एजेंट्स पर क्या होना चाहिए?

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

जब भारी बिल्ड्स कंट्रोलर पर चलते हैं, तो वे शेड्यूलिंग प्रक्रिया और वेब इंटरफेस के साथ CPU और मेमोरी के लिए प्रतिस्पर्धा करते हैं, और पूरा सिस्टम धीमा या अस्थिर हो जाता है। अच्छी तरह कॉन्फ़िगर किए गए Jenkins सेटअप में कंट्रोलर पर एक्ज़ीक्यूटर्स पूरी तरह से डिसेबल होते हैं और पूरी कंप्यूटेशन समर्पित एजेंट्स पर रूट होती है।

Jenkins के लिए कौन-से हाई अवेलेबिलिटी विकल्प मौजूद हैं?

Jenkins डिफ़ॉल्ट रूप से एक सिंगल प्रोसेस के रूप में चलता है, जो इसे सिंगल पॉइंट ऑफ फेल्योर बनाता है। इसे संबोधित करने के विकल्प सरल वार्म स्टैंडबाय सेटअप (प्राथमिक फेल होने पर प्रमोशन के लिए तैयार दूसरा इंस्टेंस) से लेकर CloudBees CI जैसी कॉमर्शियल ऑफरिंग्स के माध्यम से एक्टिव-पैसिव या एक्टिव-एक्टिव क्लस्टरिंग तक हैं।

कई संगठनों के लिए, एक मज़बूत बैकअप रणनीति और Jenkins Configuration as Code का संयोजन क्लस्टरिंग की परिचालन जटिलता के बिना पर्याप्त तेज़ रिकवरी देता है। सही विकल्प अंततः इस पर निर्भर करता है कि रिकवरी विंडो के दौरान वास्तविक रूप से कितनी डाउनटाइम स्वीकार्य है—जो कि इस प्रश्न से अलग है कि सैद्धांतिक रूप से कितनी डाउनटाइम स्वीकार्य सुनाई देती है।

Jenkins Configuration as Code क्या है, और यह वास्तव में किस समस्या का समाधान करता है?

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

JCasC के बिना, कॉन्फ़िगरेशन वेब UI में रहता है, बदलावों का कोई ऑडिट ट्रेल नहीं होता, और कंट्रोलर फेल होने से रिकवरी का मतलब मेमोरी या संभवतः पुरानी डॉक्यूमेंटेशन के आधार पर सेटिंग्स को मैनुअली फिर से बनाना होता है।

इसके साथ, कॉन्फ़िगरेशन बदलाव कोड रिव्यू से गुजरते हैं, वातावरण YAML से ठीक-ठीक पुन:निर्मित किए जा सकते हैं, और कंट्रोलर को फिर से बनाना एक नई इंस्टेंस प्रोविज़न करने और एक फ़ाइल लागू करने का मामला बन जाता है।

प्रोडक्शन के लिए Jenkins को हार्डन करने में क्या-क्या शामिल है?

कई क्षेत्रों पर एक साथ ध्यान देने की ज़रूरत है। रोल-बेस्ड एक्सेस कंट्रोल यह सुनिश्चित करता है कि हर टीम के पास केवल वही अनुमतियाँ हों जिनकी उनकी पाइपलाइंस को आवश्यकता है।

कंट्रोलर पर एक्ज़ीक्यूटर्स डिसेबल होने चाहिए ताकि वहाँ बिल्ड वर्कलोड्स कभी न चलें। एजेंट-टू-कंट्रोलर कम्युनिकेशन JNLP या SSH पर म्यूचुअल ऑथेंटिकेशन के साथ चलना चाहिए। वेब इंटरफेस के सामने TLS के साथ एक रिवर्स प्रॉक्सी होना चाहिए। सीक्रेट्स को बिल्ड लॉग्स में आने से रोकने के लिए withCredentials ब्लॉक का लगातार उपयोग होना चाहिए।

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

आप बड़े पैमाने पर प्लगइन लाइफसाइकल कैसे संभालते हैं?

बड़े इंस्टॉलेशन्स में, प्लगइन्स वस्तुतः डिपेंडेंसीज़ होते हैं और उन्हें उसी तरह ट्रीटमेंट मिलना चाहिए जैसा एप्लिकेशन डिपेंडेंसीज़ को मिलता है। प्लगइन सूची को वर्ज़न कंट्रोल में मेंटेन करना (या तो JCasC के माध्यम से या Docker-आधारित Jenkins इमेज के लिए plugins.txt फ़ाइल से) आपको एक पुनरुत्पाद्य प्रारंभिक बिंदु देता है। 

प्रोडक्शन में प्रमोट करने से पहले स्टेजिंग वातावरण में अपडेट्स का परीक्षण करना अनुकूलता समस्याओं को पकड़ लेता है, इससे पहले कि वे टीमों को प्रभावित करें। Plugin Usage प्लगइन यह पहचानने में मदद करता है कि आप कुछ हटाने से पहले कौन-से जॉब्स किस प्लगइन्स पर निर्भर हैं। 

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

समानांतर पाइपलाइन एक्ज़ीक्यूशन कैसे काम करता है, और इसके क्या ट्रेड-ऑफ्स हैं?

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

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

उच्च-लोड अवधि के दौरान, ब्रांचेज़ क्यू में लगकर इंतज़ार करती हैं, और कई एजेंट्स को प्रोविज़न करने का ओवरहेड कभी-कभी छोटे समानांतर स्टेजेज़ को उन्हें क्रमिक रूप से चलाने की तुलना में धीमा बना देता है।

Jenkins DevOps इंजीनियर इंटरव्यू प्रश्न

DevOps इंजीनियर इंटरव्यूज़ पाइपलाइन ऑथरिंग से आगे जाते हैं। बातचीत आमतौर पर डिलीवरी पाइपलाइन डिजाइन, व्यापक टूलचेन में इंटीग्रेशन, और विश्वसनीयता व डिप्लॉयमेंट रणनीति पर निर्णयों को कवर करती है।

आप माइक्रोसर्विसेज़ एप्लिकेशन के लिए CI/CD पाइपलाइन कैसे डिजाइन करेंगे?

शुरुआत डिप्लॉयमेंट टोपोलॉजी को समझने से होती है: कितनी सर्विसेज़ हैं, उनकी डिपेंडेंसीज़ कैसी दिखती हैं, और टीम का रिलीज़ कैडेंस क्या मांगता है।

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

आमतौर पर प्रत्येक सर्विस को अपनी पाइपलाइन मिलती है, जिसमें साझा लाइब्रेरी कोड उन सामान्य चरणों को संभालता है जो सर्विसेज़ में दोहरते हैं। जब कोई API कॉन्ट्रैक्ट बदलता है तो डाउनस्ट्रीम सर्विसेज़ का समन्वय अतिरिक्त लॉजिक मांगता है, प्रायः पैरामीटराइज़्ड डाउनस्ट्रीम जॉब्स या पाइपलाइंस के बीच इवेंट-ड्रिवेन ट्रिगर्स के माध्यम से।

यदि आप यह जानने में रुचि रखते हैं कि CI/CD सिद्धांत एप्लिकेशन सर्विसेज़ से आगे बढ़कर डेटा वर्कफ़्लोज़ और डेटा इंजीनियरिंग पाइपलाइंस तक कैसे फैलते हैं, तो यह गाइड विशेष रूप से एनालिटिक्स और डेटा इंफ्रास्ट्रक्चर पर CI/CD कैसे लागू होता है, इसकी पड़ताल करता है।

व्यवहार में Jenkins Kubernetes के साथ कैसे काम करता है?

सामान्य सेटअप Kubernetes में Jenkins को Deployment या StatefulSet के रूप में चलाता है और Kubernetes प्लगइन का उपयोग करके प्रत्येक बिल्ड के लिए क्षणिक एजेंट पॉड्स प्रोविज़न करता है। पॉड टेम्पलेट्स यह परिभाषित करते हैं कि बिल्ड के दौरान कौन-से कंटेनर्स उपलब्ध होंगे, ताकि कोई स्टेज Maven कंटेनर में चले, फिर Docker कंटेनर में, फिर kubectl कंटेनर में—सब एक ही पॉड के भीतर।

बिल्ड्स को हर रन में क्लीन वातावरण मिलता है, क्लस्टर के साथ ऑटोमेटिक स्केलिंग होती है, और एजेंट इंफ्रास्ट्रक्चर काफी हद तक स्वयं-प्रबंधित रहता है। डिप्लॉयमेंट्स के लिए, पाइपलाइंस उपयुक्त kubeconfig और क्लस्टर परमिशन्स वाले एजेंट कंटेनर से kubectl apply या helm upgrade चलाती हैं।

ब्लू-ग्रीन और कैनरी डिप्लॉयमेंट्स Jenkins के साथ कैसे काम करते हैं?

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

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

दोनों रणनीतियों में Jenkins को पाइपलाइन स्टेप्स में API कॉल्स के माध्यम से इन्फ्रास्ट्रक्चर लेयर के साथ इंटरैक्ट करना पड़ता है, और दोनों को ऐसे स्वचालित वैलिडेशन गेट्स चाहिए जो परिभाषित थ्रेसहोल्ड्स पार होने पर बिना मानव हस्तक्षेप के रोलबैक ट्रिगर कर सकें।

Jenkins पाइपलाइन में आर्टिफैक्ट मैनेजमेंट कैसे होना चाहिए?

गैर-तुच्छ किसी भी चीज़ के लिए, आर्टिफैक्ट्स Jenkins बिल्ड्स से जुड़े रहने के बजाय Nexus, Artifactory या किसी क्लाउड रजिस्ट्री जैसे समर्पित रिपॉजिटरी में जाने चाहिए। पाइपलाइन आर्टिफैक्ट बनाती है, उसे बिल्ड नंबर या Git कमिट से व्युत्पन्न वर्ज़न टैग के साथ प्रकाशित करती है, और उसके कॉर्डिनेट्स को बिल्ड मेटाडेटा के रूप में रिकॉर्ड करती है।

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

आप Jenkins पाइपलाइंस में ऑब्ज़र्वेबिलिटी कैसे बनाते हैं?

Jenkins वातावरण में ऑब्ज़र्वेबिलिटी कई परतों को कवर करती है। Prometheus Metrics प्लगइन बिल्ड काउंट्स, एक्ज़ीक्यूटर उपलब्धता, क्यू डेप्थ और ड्यूरेशन हिस्टोग्राम्स को Prometheus मैट्रिक्स के रूप में एक्सपोज़ करता है जो Grafana डैशबोर्ड में फ़ीड होते हैं। JUnit XML आउटपुट को टेस्ट रिज़ल्ट पब्लिशर से पार्स करने पर प्रति रन के बजाय समय के साथ विफलता ट्रैकिंग मिलती है।

विफलता और रिकवरी पर Slack या ईमेल नोटिफिकेशन्स मैनुअल मॉनिटरिंग की आवश्यकता बिना तात्कालिक अलर्टिंग संभालते हैं। अधिक परिष्कृत जरूरतों के लिए, बिल्ड इवेंट्स को Elasticsearch या Splunk में भेजना आपको जॉब्स के पार विफलता पैटर्न क्वेरी करने और बिल्ड विफलताओं को डिप्लॉयमेंट इवेंट्स से सहसंबंधित करने देता है—ऐसे तरीकों से जिन्हें केवल Jenkins इंटरफेस सपोर्ट नहीं करता।

Jenkins बैकएंड डेवलपर इंटरव्यू प्रश्न

बैकएंड डेवलपर इंटरव्यूज़ में फ़ोकस Jenkins के उन हिस्सों पर होता है जो दैनिक काम को सीधे प्रभावित करते हैं: पाइपलाइंस लिखना, टेस्ट चलाना, आर्टिफैक्ट्स मैनेज करना, और यह पर्याप्त तेजी से समझना कि बिल्ड क्यों टूटा ताकि विकास पर लौट सकें।

आप एक सामान्य बैकएंड सर्विस के लिए Jenkinsfile कैसे लिखते हैं?

बैकएंड सर्विस के लिए एक न्यूनतम Jenkinsfile चार स्टेजेज़ कवर करता है: checkout, build, test, और archive। डिक्लेरेटिव सिंटैक्स में, यह agent सेक्शन के साथ एक pipeline ब्लॉक और व्यक्तिगत स्टेप्स वाले stages ब्लॉक के रूप में होता है। वहाँ से, प्रोजेक्ट की ज़रूरतों के आधार पर पाइपलाइन बढ़ती है: कोड क्वालिटी गेट्स, Docker इमेज बिल्ड्स, और टेस्ट वातावरण में डिप्लॉयमेंट।

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

स्वचालित टेस्ट्स पाइपलाइन में कैसे फिट होते हैं?

टेस्ट चलाना आमतौर पर बिल्ड स्टेज के बाद एक डेडिकेटेड स्टेज होता है। JVM प्रोजेक्ट्स के लिए, इसका मतलब Maven या Gradle को कॉल करना है; Python प्रोजेक्ट्स के लिए, pytest या unittest। टेस्ट रिज़ल्ट्स पब्लिश करना उन्हें चलाने जितना ही महत्वपूर्ण है: Jenkins JUnit-फॉर्मेट XML आउटपुट को पार्स करता है और बिल्ड इतिहास के पार पास/फेल ट्रेंड्स को ट्रैक करता है, ताकि टेस्ट रिग्रेशन्स समय के साथ दिखें, न कि केवल उसी बिल्ड में जहाँ वे पहली बार सामने आएँ।

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

बिल्ड आर्टिफैक्ट्स को कैसे मैनेज करना चाहिए?

छोटे प्रोजेक्ट्स के लिए, archiveArtifacts स्टेप जो आर्टिफैक्ट्स को Jenkins बिल्ड रिकॉर्ड से संलग्न करता है, पर्याप्त है। किसी भी बड़ी चीज़ के लिए, पाइपलाइन को बिल्ड करने के तुरंत बाद आर्टिफैक्ट्स को बाहरी रिपॉजिटरी में प्रकाशित करना चाहिए।

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

आप वर्ज़न कंट्रोल इवेंट्स से Jenkins बिल्ड्स को कैसे ट्रिगर करते हैं?

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

मल्टीब्रांच पाइपलाइंस ब्रांच डिस्कवरी और जॉब क्रिएशन स्वचालित रूप से संभालती हैं, इसलिए नए ब्रांचेज़ बिना मैनुअल हस्तक्षेप के पिक हो जाते हैं। GitHub Branch Source प्लगइन पुल रिक्वेस्ट्स के लिए पाइपलाइन रन बनाता है और बिल्ड स्टेटस GitHub पर रिपोर्ट करता है, जो ब्रांच प्रोटेक्शन नियमों के साथ स्वाभाविक रूप से इंटीग्रेट होता है जो मर्ज से पहले पासिंग CI की मांग करते हैं।

कोड क्वालिटी टूलिंग कैसे इंटीग्रेट होती है?

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

Warnings Next Generation प्लगइन कई लिंटिंग टूल्स के आउटपुट को एक ही व्यू में समेकित करता है, जो तब उपयोगी होता है जब कई क्वालिटी चेक्स एक ही पाइपलाइन में चलते हैं। JaCoCo या coverage.py जैसे टूल्स से कवरेज रिपोर्ट्स उनके संबंधित Jenkins प्लगइन्स के माध्यम से प्रकाशित और बिल्ड्स के पार ट्रैक की जाती हैं।

आप उस बिल्ड को कैसे डिबग करते हैं जो लोकली पास होता है लेकिन Jenkins में फेल?

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

सबसे विश्वसनीय तरीका यह है कि वही Docker इमेज, वही एनवायरनमेंट वेरिएबल्स सेट करके, और वही कमांड्स क्रम में चलाकर एनवायरनमेंट्स को वास्तव में समान बना दें जो Jenkins एजेंट उपयोग करता है। अधिकांश "मेरी मशीन पर चलता है" प्रकार की विफलताएँ तब जल्दी सुलझ जाती हैं जब वातावरण वास्तव में मेल खाते हैं।

Jenkins SRE इंटरव्यू प्रश्न

Jenkins के इर्द-गिर्द SRE इंटरव्यूज़ में फ़ोकस विश्वसनीयता पर होता है—और इस पर कि जब Jenkins स्वयं समस्या बन जाता है न कि समाधान।

आप Jenkins की विश्वसनीयता कैसे सुनिश्चित करते हैं?

Jenkins कंट्रोलर के साथ किसी भी अन्य प्रोडक्शन सर्विस जैसा व्यवहार करना आधार है। इसका मतलब है Jenkins होम डायरेक्टरी के स्वचालित बैकअप्स नियमित शेड्यूल पर, एक डॉक्यूमेंटेड रिकवरी प्रक्रिया जिसे वास्तव में टेस्ट किया गया हो, JVM हीप उपयोग और बिल्ड क्यू डेप्थ पर अलर्ट्स के साथ हेल्थ मॉनिटरिंग, और रनअवे बिल्ड्स को सभी उपलब्ध एजेंट्स का उपभोग करने से रोकने के लिए ग्लोबल और प्रति-जॉब स्तर पर बिल्ड टाइमआउट सीमाएँ।

किसी पर्सिस्टेंट वॉल्यूम स्टोरेज के साथ कंटेनर में Jenkins चलाना भी तब कंट्रोलर प्रतिस्थापन को तेज़ बनाता है जब कुछ गलत हो।

बैकअप रणनीति वास्तव में कैसी दिखती है?

jobs डायरेक्टरी, credentials.xml और secrets डायरेक्टरी, config.xml, और कोई भी प्लगइन-विशिष्ट कॉन्फ़िगरेशन फ़ाइलें—सभी का बैकअप होना चाहिए। ThinBackup प्लगइन कॉन्फ़िगर किए गए टारगेट डायरेक्टरी में शेड्यूल्ड बैकअप्स को ऑटोमेट करता है।

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

सबसे महत्वपूर्ण परिचालन बिंदु समय-समय पर रिस्टोर प्रक्रिया का परीक्षण करना है, क्योंकि वह बैकअप जिसे आपने कभी वास्तव में रिस्टोर नहीं किया, एक अपरीक्षित धारणा है, न कि एक काम करने वाली रिकवरी योजना।

बड़े Jenkins वातावरणों में सामान्य प्रदर्शन समस्याएँ क्या हैं?

कुछ पैटर्न बड़े इंस्टॉलेशन्स में बार-बार दिखते हैं। Jenkins होम डायरेक्टरी का निरंतर बढ़ना शायद सबसे आम है: आर्टिफैक्ट्स इकट्ठा हो जाते हैं, पुराने बिल्ड्स जमा होते जाते हैं, और अंततः फाइलसिस्टम पूरी तरह भर जाता है।

हर जॉब पर रिटेंशन नीतियाँ इसे संबोधित करती हैं, लेकिन उन्हें डिफ़ॉल्ट्स पर छोड़ने के बजाय सक्रिय रूप से सेट करना पड़ता है। JVM हीप एग्ज़ॉशन एक और दोहराई जाने वाली समस्या है क्योंकि डिफ़ॉल्ट हीप सेटिंग्स रूढ़िवादी हैं और बड़े इंस्टॉलेशन्स के लिए ट्यूनिंग की ज़रूरत होती है।

बिल्ड क्यू बैकअप—जहाँ जॉब्स उपलब्ध एजेंट्स का इंतज़ार करते हुए बैठती हैं—या तो अपर्याप्त क्षमता की ओर इशारा करता है, या जरूरत से अधिक लंबी बिल्ड समयावधि की ओर। उच्च वॉल्यूम पर वर्बोज़ बिल्ड आउटपुट से कंट्रोलर पर लॉग I/O सैचुरेशन ऐसी चीज़ है जिसे टीमें अक्सर तब तक नज़रअंदाज करती हैं जब तक यह संकट नहीं बन जाती।

आप बड़े Jenkins वातावरण में ऑब्ज़र्वेबिलिटी कैसे जोड़ते हैं?

Prometheus Metrics प्लगइन बिल्ड काउंट्स, एक्ज़ीक्यूटर उपलब्धता, ड्यूरेशन हिस्टोग्राम्स और क्यू डेप्थ को Prometheus मैट्रिक्स के रूप में एक्सपोज़ करता है जिन्हें Grafana डैशबोर्ड में विज़ुअलाइज़ किया जा सकता है।

जॉब्स के पार विफलता पैटर्न क्वेरी करने या बिल्ड विफलताओं को इन्फ्रास्ट्रक्चर परिवर्तनों से सहसंबंधित करने के लिए, बिल्ड इवेंट्स को Elasticsearch या Splunk में भेजना Jenkins में सीधे निर्मित किसी भी चीज़ की तुलना में कहीं बेहतर विश्लेषणात्मक क्षमता देता है।

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

आप बड़े संगठन में क्रेडेंशियल्स का प्रबंधन कैसे करते हैं?

Jenkins का बिल्ट-इन क्रेडेंशियल स्टोर क्रेडेंशियल्स को आराम की स्थिति में एन्क्रिप्ट करता है और उन्हें पाइपलाइंस के लिए प्लेनटेक्स्ट उजागर किए बिना उपलब्ध कराता है, जो कई संगठनों के लिए पर्याप्त है। कठोर आवश्यकताओं के लिए, HashiCorp Vault प्लगइन पाइपलाइंस को रनटाइम पर अल्प-आयु क्रेडेंशियल्स फ़ेच करने देता है, बजाय इसके कि Jenkins में दीर्घ-आयु सीक्रेट्स स्टोर किए जाएँ।

उस सेटअप में यदि कंट्रोलर से समझौता हो जाता है, तो हमलावर के पास Jenkins इंस्टेंस तक पहुंच है लेकिन स्वचालित रूप से सभी प्रोडक्शन क्रेडेंशियल्स तक नहीं। नियमित शेड्यूल पर क्रेडेंशियल्स को रोटेट करना, कौन-सी पाइपलाइंस किन क्रेडेंशियल्स का एक्सेस करती हैं इसका ऑडिट करना, और कर्मचारी ऑफबोर्डिंग के दौरान उस एक्सेस की समीक्षा करना—ये सब इन्स्टीट्यूशनल मेमोरी पर निर्भर रहने के बजाय डॉक्यूमेंटेड रनबुक में होने चाहिए।

आप सैकड़ों Jenkins जॉब्स को कैसे मैनेज करते हैं?

उस पैमाने पर Jenkins UI के माध्यम से मैन्युअल प्रबंधन काम नहीं करता। Job DSL या Jenkins Job Builder कोड से जॉब्स जेनरेट करता है, जो जॉब कॉन्फ़िगरेशन को रिव्यूएबल और पुनरुत्पाद्य बनाता है। Folders प्लगइन जॉब्स को उनके अपने परमिशन स्कोप्स के साथ तार्किक समूहों में व्यवस्थित करता है।

शेयर्ड लाइब्रेरियाँ और पाइपलाइन टेम्पलेट्स उन जॉब्स में डुप्लिकेशन कम करते हैं जो समान पैटर्न का पालन करते हैं। एक सुसंगत नामकरण कन्वेंशन (उदाहरण के लिए, project-environment-action) जॉब सूची को नेविगेबल बनाता है जब इसमें सैकड़ों एंट्रीज़ हों।

नियमित ऑडिट्स जो उन जॉब्स की पहचान और आर्काइव करते हैं जिनके पास अब सक्रिय रिपॉजिटरीज़ या स्पष्ट ओनर्स नहीं हैं, सूची को ऐसे बिल्ड्स से भरने से रोकते हैं जिन्हें कोई पहचान या जिम्मेदारी नहीं ले सकता।

परिदृश्य-आधारित Jenkins इंटरव्यू प्रश्न

परिदृश्य प्रश्न वे हैं जहाँ अक्सर इंटरव्यू तय होते हैं। शायद ही किसी का एकल सही उत्तर होता है, और इंटरव्यूअर्स संरचित सोच, कार्रवाई से पहले आपको किन सूचनाओं की ज़रूरत है इसकी स्पष्ट समझ, और प्रोडक्शन वातावरणों में वास्तव में होने वाली समस्याओं की परिचितता ढूंढते हैं।

एक पाइपलाइन किसी विशिष्ट स्टेज पर अंतराल पर फेल होती है। आप इसका निदान कैसे करेंगे?

कई फेल्ड रन का कंसोल आउटपुट खींचकर शुरू करें ताकि देखें कि क्या विफलता संदेश उनके बीच सुसंगत है।

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

यदि विफलताएँ सभी एजेंट्स में फैली हों लेकिन रैंडम रूप से हों, तो timestamps() पाइपलाइन में जोड़कर टाइमिंग देखें और यह जांचें कि व्यक्तिगत स्टेप्स में कितना समय लग रहा है। धीमी नेटवर्क कॉल या अविश्वसनीय बाहरी सेवा पर इंतज़ार करना टाइमिंग डेटा में स्पष्ट रूप से दिखता है। प्रभावित एजेंट पर असफल स्टेज को अलग से पुन:प्रस्तुत करना आमतौर पर वातावरण-विशिष्ट समस्याओं को जल्दी सतह पर लाता है।

पिछले कुछ हफ्तों में बिल्ड समय स्पष्ट रूप से बढ़ गए हैं। आप क्या जाँच करेंगे?

हाल के बिल्ड लॉग्स की तुलना सुस्ती से पहले के लॉग्स से करना यह पहचानने में मदद करता है कि कौन-से स्टेजेज़ में अधिक समय लग रहा है।

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

संबंधित विंडो में स्वयं Jenkinsfile में हुए बदलाव (नए स्टेजेज़ जोड़े गए, पैरेलल एक्ज़ीक्यूशन हटाया गया) की समीक्षा करना सार्थक है। एजेंट डिस्क का भर जाना, जो राइट ऑपरेशन्स को धीमा या रोक देता है, एक और चीज़ है जिसे जल्दी जांचना चाहिए।

आपको Jenkins को Kubernetes में माइग्रेट करना है। आप इसे कैसे अप्रोच करेंगे?

वर्तमान स्थिति का ऑडिट करना आवश्यक पहला कदम है: सभी जॉब्स, उनकी कॉन्फ़िगरेशन, कौन-से प्लगइन्स उपयोग में हैं, कौन-से क्रेडेंशियल्स मौजूद हैं, और कोई भी शेयर्ड लाइब्रेरी। यदि सिस्टम कॉन्फ़िगरेशन पहले से इस तरह व्यक्त नहीं है, तो JCasC के माध्यम से उसे एक्सपोर्ट करना एक बेसलाइन देता है। Kubernetes में आधिकारिक Helm चार्ट का उपयोग करके नया इंस्टेंस सेट करना, JCasC कॉन्फ़िगरेशन लागू करना, और जॉब कॉन्फ़िगरेशन्स इम्पोर्ट करना अगला कदम है।

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

Jenkins पाइपलाइन के माध्यम से क्रेडेंशियल्स लीक हो गए। आप क्या कदम उठाएंगे?

पहला कदम स्रोत पर एक्सपोज़्ड क्रेडेंशियल को रिवोक और रोटेट करना है—Jenkins में कुछ करने से पहले—क्योंकि इससे संभावित एक्सपोज़र विंडो सीमित होती है। फिर घटना का दायरा स्थापित करने की आवश्यकता है: किन बिल्ड्स ने क्रेडेंशियल को एक्सपोज़ किया, उसे किन सिस्टम्स तक एक्सेस था, और क्या कोई अनधिकृत एक्सेस का पता लगाया जा सकता है।

Jenkins के स्टोर से क्रेडेंशियल को हटाना और उसे नए जेनरेट किए गए से बदलना अगला कदम है। उस Jenkinsfile और किसी भी शेयर्ड लाइब्रेरी कोड का ऑडिट करना जिसने लीक का कारण बना, आमतौर पर दिखाता है कि किसी शेल कमांड ने क्रेडेंशियल को सीधे आउटपुट में प्रिंट कर दिया—जिसे withCredentials ब्लॉक मास्क करके रोकता है। अन्य पाइपलाइंस में समान पैटर्न्स की जाँच करना सार्थक है क्योंकि एक लीक हुआ क्रेडेंशियल अक्सर संकेत देता है कि अन्य भी तुल्य एक्सपोज़र रखते हैं। घटना का दस्तावेज़ीकरण चक्र को पूरा करता है।

आप पूरे वातावरण में फ्लेकी बिल्ड्स कैसे कम करेंगे?

पहला कदम मापन है: कौन-से जॉब्स और कौन-से स्टेजेज़ अंतराल पर फेल होते हैं, इसे ट्रैक करना—क्योंकि जो पैटर्न उभरते हैं वे आमतौर पर मूल कारणों की ओर इशारा करते हैं। टेस्ट फ्लेकिनेस सबसे आम दोषी है, आमतौर पर टाइमिंग डिपेंडेंसीज़, टेस्ट्स के बीच साझा स्टेट, या पूरी तरह विश्वसनीय न होने वाली बाहरी सेवाओं के कॉल्स से। ज्ञात-फ्लेकी टेस्ट्स को एक अलग नॉन-ब्लॉकिंग सूट में क्वारंटीन करना विकास टीमों को उन्हें ठीक करने का समय देता है, बिना मुख्य पाइपलाइन को आगे बढ़ने से रोकें।

इन्फ्रास्ट्रक्चर-स्तरीय फ्लेकिनेस जैसे नेटवर्क टाइमआउट्स या रजिस्ट्री पुल विफलताओं के लिए, विशिष्ट स्टेप्स पर उपयुक्त बैकऑफ के साथ रिट्राई लॉजिक जोड़ना लक्षण को संबोधित करता है, जबकि अंतर्निहित विश्वसनीयता समस्या अलग से हल की जाती है। एजेंट संसाधन समस्याएँ (मेमोरी या डिस्क कम पड़ना) पॉड टेम्पलेट्स पर संसाधन सीमाओं को कड़ा कर और यह सुनिश्चित कर संबोधित की जाती हैं कि प्रत्येक बिल्ड शुरू होने से पहले वर्कस्पेस क्लीनअप लगातार चले।

Jenkins इंटरव्यू में आम गलतियाँ

कुछ पैटर्न ऐसे उम्मीदवारों में बार-बार दिखते हैं जिनकी तकनीकी नींव अन्यथा मजबूत होती है।

  • केवल Freestyle जॉब्स जानना एक कमी है जो जल्दी सामने आ जाती है। Freestyle सरल ऑटोमेशन के लिए ठीक है, लेकिन इंटरव्यूअर्स तेज़ी से पाइपलाइन क्षेत्र में चले जाते हैं, और जो उम्मीदवार विश्वसनीय रूप से Jenkinsfile नहीं लिख सकते या उस पर चर्चा नहीं कर सकते, वे प्रोडक्शन रेडीनेस दिखाने में संघर्ष करते हैं।
  • CI को "सिर्फ टेस्ट्स चलाना" बताना वह नहीं है जो इंटरव्यूअर्स खंगालना चाहते हैं। एक अच्छी तरह से डिजाइन किया गया Jenkins सेटअप कोड क्वालिटी, आर्टिफैक्ट मैनेजमेंट, एनवायरनमेंट प्रमोशन, डिप्लॉयमेंट रणनीति और फ़ीडबैक लूप्स को कवर करता है। बिल्ड स्टेप पर रुक जाना दिलचस्प क्षेत्र के अधिकांश हिस्से को अछूता छोड़ देता है।
  • सुरक्षा को नज़रअंदाज़ करना। कई उम्मीदवार पाइपलाइन मैकेनिक्स समझा सकते हैं लेकिन क्रेडेंशियल हैंडलिंग, परमिशन मॉडल्स, या समझौता किए गए Jenkins इंस्टॉलेशन से वास्तव में क्या एक्सपोज़ होता है—इस पर गंभीरता से नहीं सोचा। सुरक्षा प्रश्न DevOps और SRE इंटरव्यूज़ में नियमित रूप से आते हैं।
  • ट्रेड-ऑफ्स समझाने में असमर्थ होना। Jenkins कई ऐसे निर्णय शामिल करता है जिनके एकल सही उत्तर नहीं होते: डिक्लेरेटिव बनाम स्क्रिप्टेड, स्टैटिक एजेंट्स बनाम डायनेमिक, क्लस्टरिंग बनाम बैकअप-आधारित HA। जो उम्मीदवार केवल यह बताते हैं कि उन्होंने क्या किया, लेकिन यह नहीं कि अन्य विकल्पों पर उसे क्यों चुना—वे इंटरव्यूअर्स को अनिश्चित छोड़ देते हैं।

Jenkins इंटरव्यू की तैयारी कैसे करें

सबसे उपयोगी तैयारी कुछ वास्तविक बनाना है। Jenkins को लोकली चलाना (शुरू करने के लिए एक Docker कंटेनर पर्याप्त है), एक छोटा एप्लिकेशन बनाना, और एक Jenkinsfile लिखना जो उसे बिल्ड करे, उसके टेस्ट्स चलाए, और एक आर्टिफैक्ट बनाए—ये आवश्यकताएँ कवर करता है। उस सेटअप को Docker बिल्ड स्टेज जोड़कर, किसी वास्तविक रिपॉजिटरी के खिलाफ मल्टीब्रांच पाइपलाइन कॉन्फ़िगर करके, और एक वेबहुक ट्रिगर सेटअप करके बढ़ाना—ऐसे प्रश्नों को सतह पर लाता है जो केवल डॉक्यूमेंटेशन कभी नहीं उठाता।

बिना रेफरेंस मटेरियल के Jenkinsfiles लिखने का अभ्यास करना भी उपयोगी है। मध्य-स्तर और उससे ऊपर के इंटरव्यूअर्स अक्सर उम्मीदवारों से टेक्स्ट एडिटर या व्हाइटबोर्ड पर पाइपलाइन स्केच करने के लिए कहते हैं। बेसिक संरचना को याद से लिख पाना (agent डिक्लेरेशन, stages, steps, क्रेडेंशियल हैंडलिंग, एरर हैंडलिंग) वास्तविक परिचितता दिखाता है—सिर्फ चीज़ें ढूंढने की क्षमता नहीं।

खासतौर पर DevOps और SRE भूमिकाओं के लिए, किसी फेल्योर का सिमुलेशन करना और उससे रिकवर करना बेहद मूल्यवान तैयारी है। Jenkins होम डायरेक्टरी को डिलीट करना और उसे बैकअप से रिस्टोर करना, रिकवरी का समय लेना, किसी पाइपलाइन को जानबूझकर तोड़ना और केवल कंसोल आउटपुट का उपयोग करके उसे डिबग करना, JCasC एक्सपोर्ट-और-रीइम्पोर्ट साइकिल से गुजरना—ये अभ्यास उस तरह की अंतर्दृष्टि बनाते हैं जिसे परिदृश्य प्रश्न टटोलने के लिए डिज़ाइन किए गए हैं, और जिसे वास्तव में काम किए बिना विश्वसनीय रूप से प्रदर्शित करना कठिन है।

निष्कर्ष

Jenkins का ज्ञान वरिष्ठता और भूमिका के साथ स्केल होता है, और इंटरव्यू अपेक्षाएँ उसी कर्व का अनुसरण करती हैं।

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

यदि आप इंटरव्यू तैयारी से आगे जाकर प्रोडक्शन-स्तरीय आत्मविश्वास बनाना चाहते हैं, तो हमारे पास अलग-अलग कोणों से मददगार संसाधन हैं:


Josep Ferrer's photo
Author
Josep Ferrer
LinkedIn
Twitter

जोसेप यूरोपीय परियोजनाओं में विशेषज्ञता रखने वाले फ्रीलांस डेटा साइंटिस्ट हैं, जिन्हें डेटा स्टोरेज, प्रोसेसिंग, उन्नत एनालिटिक्स, और प्रभावशाली डेटा स्टोरीटेलिंग में महारत है। 

एक शिक्षक के रूप में, वे यूनिवर्सिटी ऑफ नवार्रा के मास्टर’s प्रोग्राम में बिग डेटा पढ़ाते हैं और Medium, KDNuggets, तथा DataCamp जैसे प्लेटफ़ॉर्म पर लेखों के माध्यम से अपने विचार साझा करते हैं। जोसेप अपनी न्यूज़लेटर Databites (databites.tech) में भी डेटा और टेक के बारे में लिखते हैं। 

उन्होंने पॉलिटेक्निक यूनिवर्सिटी ऑफ कैटालोनिया से इंजीनियरिंग फिजिक्स में बीएस और पॉम्पेऊ फाब्रा यूनिवर्सिटी से इंटेलिजेंट इंटरएक्टिव सिस्टम्स में एमएस किया है।

FAQs

Jenkins का मुख्य उपयोग क्या है?

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

क्या मुझे इंटरव्यूज़ के लिए Jenkins CLI जानना चाहिए?

भूमिका पर निर्भर करता है। बैकएंड डेवलपर इंटरव्यू शायद ही इसे छूते हैं। DevOps और SRE पोज़ीशन्स में कभी-कभी आते हैं, खासकर प्रशासनिक कार्यों को स्क्रिप्ट करने के इर्द-गिर्द। यह जानना कि यह मौजूद है और मोटे तौर पर क्या संभालता है—आमतौर पर पर्याप्त होता है।

Pipeline जॉब को Freestyle जॉब से क्या अलग करता है?

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

Jenkins इंटरव्यूज़ के लिए वास्तव में कितनी Groovy की ज़रूरत है?

डिक्लेरेटिव सिंटैक्स सीधे Groovy लिखने को काफी कम कर देता है। शेयर्ड लाइब्रेरियाँ और स्क्रिप्टेड पाइपलाइंस अलग कहानी हैं। मध्यम और उन्नत इंटरव्यूअर्स कभी-कभी उम्मीदवारों से बिना रेफरेंस के पाइपलाइन कोड लिखने के लिए कहते हैं। Groovy में बुनियादी सहजता रखना लाभदायक है।

GitHub Actions और GitLab CI के होते हुए भी क्या Jenkins सीखना सार्थक है?

जटिल शेयर्ड लाइब्रेरियों और व्यापक प्लगइन जरूरतों वाले सेल्फ-होस्टेड, एंटरप्राइज़-स्केल सेटअप्स के लिए—हाँ। होस्टेड CI सरल मामलों को अच्छी तरह संभालता है। यह भेद जानना और समझा पाना कि Jenkins कब सही टूल है बनाम कब ओवरकिल—इंटरव्यूअर्स पर अच्छा प्रभाव डालता है।

विषय
डेटा इंजीनियरिंग

DataCamp के साथ सीखें

कोर्स

Machine Learning के लिए CI/CD

5 घंटा
9.3K
GitHub Actions और Data Version Control के साथ मशीन लर्निंग विकास को CI/CD से बेहतर बनाएं
विवरण देखेंपाठ्यक्रम शुरू करें

अपना निःशुल्क खाता बनाएँ

अभ्यास और ट्रैक अपनी प्रगति को।

Google के साथ जारी रखें
जारी रखने पर, आप हमारी उपयोग की शर्तें, हमारी गोपनीयता नीति को स्वीकार करते हैं और यह भी कि आपका डेटा संयुक्त राज्य अमेरिका में संग्रहीत किया जाता है।
और देखें