मेरी रिलीज़ पाइपलाइन ने मेरी रिलीज़ को शिप करने से इनकार कर दिया। यह सही था।

मेरी रिलीज़ पाइपलाइन ने मेरी रिलीज़ को शिप करने से इनकार कर दिया। यह सही था।

हाल ही में, मुझे एक ऐसी स्थिति का सामना करना पड़ा जहाँ मेरी रिलीज़ पाइपलाइन ने मेरी रिलीज़ को शिप करने से इनकार कर दिया। इस घटना ने न केवल मेरे प्रोजेक्ट को बचाया बल्कि एक मज़बूत रिलीज़ प्रक्रिया होने के महत्व पर भी प्रकाश डाला।

घटना

मैंने अपने प्रोजेक्ट agentwatch के लिए एक रिलीज़ शुरू की, जो agentsec-ecosystem में agent-security टूल का हिस्सा है। रिलीज़ वर्कफ़्लो शुरू हुआ, जिसने कई महत्वपूर्ण कार्य किए:

  1. व्हील बनाना: यह एक ऐसा पैकेज बनाने की प्रक्रिया है जिसे आसानी से इंस्टॉल किया जा सके।
  2. Software Bill of Materials (SBOM) जनरेट करना: यह दस्तावेज़ सॉफ़्टवेयर के सभी घटकों को सूचीबद्ध करता है, जो सुरक्षा और अनुपालन के लिए महत्वपूर्ण है।
  3. चेकसम लिखना: ये फ़ाइलों के लिए अद्वितीय पहचानकर्ता हैं ताकि यह सुनिश्चित किया जा सके कि उनमें कोई बदलाव नहीं किया गया है।
  4. keyless Sigstore के साथ सब कुछ साइन करना: यह रिलीज़ की प्रामाणिकता को सत्यापित करके सुरक्षा की एक परत जोड़ता है।

हालाँकि, वर्कफ़्लो अपने अंतिम चरण में विफल हो गया: प्रकाशित करने से पहले रिलीज़ को सत्यापित करना। मुझे जो त्रुटि संदेश प्राप्त हुआ वह था:

ModuleNotFoundError: No module named 'cryptography'

इस विफलता का मतलब था कि मेरी GitHub रिलीज़ अनुपस्थित थी, जो निराशाजनक था लेकिन अंततः एक अच्छी बात थी। इसने दिखाया कि सिस्टम डिज़ाइन के अनुसार काम कर रहा था।

ऐसा क्यों हुआ?

यह विफलता पाइपलाइन के उस चरण के दौरान हुई जहाँ रिलीज़ पैकेज को इंस्टॉल और सत्यापित किया जाना था। जो विशिष्ट कमांड विफल हुई, वह थी agentwatch verify-release, जो एक स्वच्छ वातावरण से निर्मित आर्टिफ़ैक्ट्स की जाँच करती है। इस वर्कफ़्लो का डिज़ाइन महत्वपूर्ण था क्योंकि इसने किसी भी आर्टिफ़ैक्ट को तब तक प्रकाशित करने से इनकार कर दिया जब तक कि उसे सफलतापूर्वक सत्यापित न किया जा सके।

इस मामले में, त्रुटि 'cryptography' नामक एक अनुपलब्ध मॉड्यूल के कारण हुई। यह मॉड्यूल रिलीज़ वातावरण में इंस्टॉल नहीं था क्योंकि इसे एक वैकल्पिक अतिरिक्त माना गया था। समस्या इसलिए उत्पन्न हुई क्योंकि कोड इम्पोर्ट करने का प्रयास कर रहा था InvalidSignature शीर्ष स्तर पर 'cryptography' मॉड्यूल से, जिसका अर्थ था कि आवश्यकता न होने पर भी इसे लोड किया जा रहा था।

वह डिज़ाइन जिसने रिलीज़ को बचाया

मेरे रिलीज़ वर्कफ़्लो के डिज़ाइन में एक महत्वपूर्ण पूर्वशर्त शामिल थी: यदि agentwatch verify-release कमांड नहीं चल सकी, तो कुछ भी शिप नहीं होगा। इस निर्णय ने उस रिलीज़ को, जो एक समस्याग्रस्त रिलीज़ हो सकती थी, एक विफल रन में बदल दिया, जिसने मुझे उपयोगकर्ताओं तक पहुँचने से पहले इस समस्या का समाधान करने के लिए प्रेरित किया।

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

समस्या का समाधान

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

def _verify_signature(public: Any, alg: str, signing_input: bytes, signature: bytes) -> bool:
    from cryptography.exceptions import InvalidSignature  # lazy import
    # rest of the function...

इस समायोजन ने यह सुनिश्चित किया कि बाकी कोड 'cryptography' मॉड्यूल की आवश्यकता के बिना चल सके, जब तक कि हस्ताक्षर सत्यापन के लिए विशेष रूप से इसकी आवश्यकता न हो।

निष्कर्ष

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

लाभ

  • त्रुटिपूर्ण रिलीज़ को रोकता है: समस्याओं के उपयोगकर्ताओं तक पहुँचने से पहले ही उन्हें पकड़ लेता है।
  • कोड की गुणवत्ता में सुधार करता है: जाँच लागू करके बेहतर कोडिंग प्रथाओं को प्रोत्साहित करता है।
  • विश्वसनीयता बढ़ाता है: रिलीज़ प्रक्रिया में विश्वास बढ़ाता है।

कमियाँ

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

सावधानी

यह लेख शैक्षणिक उद्देश्यों के लिए है। वास्तविक परिदृश्यों में किसी भी प्लेसहोल्डर मान को वास्तविक मानों से बदला जाना चाहिए। उन पर निर्भर रहने से पहले हमेशा मूल स्रोतों से दावों की पुष्टि करें।

अक्सर पूछे जाने वाले प्रश्न

  • रिलीज़ पाइपलाइन क्या है? — रिलीज़ पाइपलाइन स्वचालित चरणों की एक श्रृंखला है जो सॉफ़्टवेयर को तैयार और डिप्लॉय करती है।
  • रिलीज़ पाइपलाइन क्यों महत्वपूर्ण है? — यह उपयोगकर्ताओं के लिए सॉफ़्टवेयर रिलीज़ होने से पहले बग और त्रुटियों को पकड़ने में मदद करता है, जिससे गुणवत्ता में सुधार होता है।
  • ModuleNotFoundError का क्या अर्थ है? — यह इंगित करता है कि वर्तमान वातावरण में एक आवश्यक मॉड्यूल उपलब्ध नहीं है।
  • मैं ModuleNotFoundError को कैसे ठीक कर सकता हूँ? — सुनिश्चित करें कि अनुपलब्ध मॉड्यूल आपके वातावरण में इंस्टॉल है।
  • Software Bill of Materials (SBOM) क्या है? — SBOM एक सॉफ़्टवेयर पैकेज के सभी घटकों की एक सूची है, जो सुरक्षा और अनुपालन के लिए उपयोगी है।
  • keyless Sigstore क्या है? — कुंजियों को मैन्युअल रूप से प्रबंधित करने की आवश्यकता के बिना सॉफ़्टवेयर रिलीज़ को साइन करने की एक विधि।

टैग

#release #pipeline #software #development #automation #quality #security #testing

Free field guide

API Security Testing Checklist

A practical workflow for testing authentication, authorization, input handling, business logic, and evidence without losing track of scope.