मेरे (ओपन सोर्स) हॉबी प्रोजेक्ट्स में से एक एक बैकअप टूल है, जो GitHub, Bitbucket आदि से रिपॉजिटरी के ऑफ़लाइन बैकअप बनाता है।
यह होस्टर्स एपीआई को रिपॉजिटरी की सूची प्राप्त करने के लिए कॉल करता है, और फिर यह Git / Mercurial / जो भी क्लोन / का उपयोग करता है स्थानीय कंप्यूटर पर रिपॉजिटरी खींचो।
इसलिए मेरे पास एकीकरण परीक्षण हैं जहां मैं प्रमाणीकरण के साथ GitHub API को कॉल कर रहा हूं।
(और जब क्लोनिंग / पुलिंग सुविधा समाप्त हो जाती है, तो संभवतः ऐसे परीक्षण होंगे जो गिटहब से क्लोनिंग रिपॉजिटरी हैं, और साथ ही प्रमाणित करने की आवश्यकता है)
मैंने विशेष रूप से इन एकीकरण परीक्षणों में उपयोग के लिए एक उपयोगकर्ता और एक संगठन बनाया ।
समस्या: मैं स्रोत कोड में कहीं भी पासवर्ड को हार्ड-कोड नहीं कर सकता क्योंकि यह खुला स्रोत है, और कोड GitHub पर सार्वजनिक है।
अब मैं क्या कर रहा हूं
परीक्षणों में, मुझे पर्यावरण चर से सभी उपयोगकर्ता नाम, पासवर्ड और रिपॉजिटरी नाम मिल रहे हैं।
यहाँ एक उदाहरण है :
config.Name = TestHelper.EnvVar("GithubApiTests_Name");
config.Password = TestHelper.EnvVar("GithubApiTests_PW");
( TestHelper.EnvVar
एक सहायक विधि है जो एक पर्यावरण चर का मान प्राप्त करती है और इसका कोई अपवाद नहीं है जब यह मौजूद नहीं है)
फिर, मेरे पास एक बैच फ़ाइल है जो उन पर्यावरण चर को सेट करती है।
वास्तविक एक ( environment-variables.bat
) को मेरी बिल्ड स्क्रिप्ट में कहा जाता है और परीक्षणों को निष्पादित करने से पहले, लेकिन स्रोत नियंत्रण में अनदेखा किया जाता है, इसलिए यह वास्तव में मेरे भंडार में नहीं है।
स्रोत नियंत्रण में क्या हैenvironment-variables.bat.sample
, जो समान पर्यावरण चर निर्धारित करता है, लेकिन नकली पासवर्ड के साथ:
rem copy/rename this file to environment-variables.bat
echo Setting environment variables for integration tests...
set GithubApiTests_Name=scm-backup-testuser
set GithubApiTests_OrgName=scm-backup-testorg
set GithubApiTests_PW=not-the-real-password
set GithubApiTests_Repo=scm-backup
इसलिए मैं अपनी मशीन पर रिपॉजिटरी को क्लोन कर सकता हूं, इस फाइल का नाम बदल सकता हूं, environment-variables.bat
नकली पासवर्ड को असली से बदलूंगा, और सभी एकीकरण परीक्षण काम करेंगे।
यह कंटीन्यूअस इंटीग्रेशन के साथ काम करता है - मैं AppVeyor का उपयोग कर रहा हूं, और वहां मैं इन परिवेश चर को वेब UI में सेट कर सकता हूं ।
मुझे इसके बारे में क्या पसंद नहीं है
मुझे लगता है कि यह ओएसएस परियोजना के लिए एक अच्छा समाधान नहीं है, और विशेष रूप से इस परियोजना के लिए नहीं :
सिद्धांत रूप में, मेरी परियोजना में योगदानकर्ता अभी तक एकीकरण परीक्षण चला सकेगा:
- GitHub पर अपना स्वयं का परीक्षण उपयोगकर्ता और परीक्षण संगठन बनाना
- कुछ परीक्षण रिपोजिटरी बना रहे हैं
environment-variables.bat
विभिन्न मूल्यों के साथ अपना स्वयं का संस्करण बनाना
समस्या यह है कि मेरा एप्लिकेशन कई स्रोत कोड होस्टर्स का बैकअप ले सकेगा।
अभी, यह केवल GitHub का समर्थन करता है, लेकिन कुछ होस्ट्स को जोड़कर अधिक होस्टर्स के लिए समर्थन जोड़ना आसान होगा जो सही इंटरफेस को लागू करते हैं।
इसलिए जब मैं बाद में अधिक होस्टरों के लिए समर्थन लागू करता हूं, तो पर्यावरण चर की संख्या बढ़ेगी। सभी एकीकरण परीक्षणों
को निष्पादित करने में सक्षम होने के लिए , एक संभावित योगदानकर्ता GitHub, Bitbucket, GitLab, में अपने स्वयं के उपयोगकर्ता, संगठन और परीक्षण रिपॉजिटरी बनाएगा .... और जो जानता है कि कितने और हैं, और उन सभी को अपने संस्करण में जोड़ते हैं । environment-variables.bat
क्या एक बेहतर समाधान है कि यह एक परियोजना पर कैसे करें जहां कोड सार्वजनिक है?
मुझे पता है कि अन्य परियोजनाएं जो मैं वर्तमान में कर रहा हूं, उसके समान है। उदाहरण के लिए,
ऑक्टोकिट.नेट के पास एकीकरण परीक्षण के लिए पर्यावरण चर स्थापित करने के लिए एक स्क्रिप्ट है जो गिटहब एपीआई कह रहे हैं।
लेकिन उन्हें केवल एक उपयोगकर्ता और एक संगठन की आवश्यकता है, और मुझे बहुत अधिक की आवश्यकता होगी।
शायद मुझे ऐसे समाधान की आवश्यकता नहीं है जो योगदानकर्ता को वास्तव में सभी एकीकरण परीक्षण चलाने में सक्षम बनाता है ।
उदाहरण के लिए, यदि कोई मेरी परियोजना के GitHub समर्थन में योगदान करना चाहेगा, तो उसे केवल GitHub एकीकरण परीक्षण चलाने में सक्षम होने की आवश्यकता होगी।
इसलिए हो सकता है कि मुझे अपने एकीकरण परीक्षणों को "समूहों" (?) और फिर कहने के लिए अनंत संख्या में विभाजित करने में सक्षम होने के लिए एक समझदार तरीका चाहिए और अब उन सभी परीक्षणों को निष्पादित करें जो समूह 'जीथब' के हैं।