मेरी टीम वर्तमान में काफी सरल शाखा / तैनाती प्रक्रिया का उपयोग करती है जो इस तरह दिखाई देती है:
┌────────┐ ┌────┐ ┌──────┐
Environments: │ DEV │ │ QA │ │ PROD │
└────────┘ └────┘ └──────┘
▲ ▲ ▲
│ │ │
┌────────┐ ┌────┐ ┌──────┐
Builds: │ DEV │ │ QA │ │ PROD │
└────────┘ └────┘ └──────┘
▲ ▲ ▲
│ │ │
┌────────┐ ┌────┐ ┌──────┐
Branches: │ master │ │ qa │ │ prod │
└────────┘ └────┘ └──────┘
प्रत्येक वातावरण की अपनी शाखा होती है (हम git का उपयोग करते हैं ) और इसका स्वयं का निर्माण उस शाखा का उपयोग करता है। जब हम एक पर्यावरण से दूसरे वातावरण में बढ़ावा देना चाहते हैं, उदाहरण के लिए, DEV से QA तक, हम master
शाखा को qa
एक नए QA बिल्ड में विलय कर देते हैं (जो तब QA वातावरण में स्वचालित रूप से तैनात हो जाता है)।
हम एक नई प्रक्रिया के लिए आगे बढ़ने पर विचार कर रहे हैं जो एक समर्पित शाखा होने और प्रत्येक पर्यावरण के लिए निर्माण करने से दूर होगी। इसके बजाय, एक एकल रिलीज़ बिल्ड एक "परिनियोजन पैकेज" बनाएगा, जिसे तब किसी भी वातावरण में तैनात किया जा सकता है। हम कल्पना कर रहे हैं कि एक विशिष्ट वर्कफ़्लो कुछ इस तरह दिखाई देगा:
┌────────┐ ┌────┐ ┌──────┐
Environments: │ DEV │ ──► │ QA │ ──► │ PROD │
└────────┘ └────┘ └──────┘
▲
\
┌───────────────┐
Builds: │ release build │
└───────────────┘
▲
│
┌────────┐ ┌─────────┐
Branches: │ master │ │ release │
└────────┘ └─────────┘
एक वातावरण से दूसरे वातावरण में प्रचार करना अब स्रोत नियंत्रण में संभाला नहीं जाएगा; बल्कि, हम पहले से निर्मित बायनेरिज़ ("परिनियोजन पैकेज") ले लेंगे और नए वातावरण पर छोड़ देंगे।
यह नई प्रणाली हमें किसी भी वातावरण में किसी भी निर्माण को तैनात करने की अनुमति देगी, जिसके कई फायदे हैं। उदाहरण के लिए, यह DEV और QA में PROD बग फिक्स का परीक्षण करने के लिए तुच्छ है। हमारी वर्तमान प्रणाली एक शाखा को वापस लाए बिना ऐसा करने का एक आसान तरीका प्रदान नहीं करती है, जिसे हम स्पष्ट रूप से बचना चाहेंगे।
इस नई प्रणाली के साथ सबसे बड़ी कमी यह है कि अब हमारे पास यह ट्रैक करने का स्वचालित तरीका नहीं है कि कौन सा कोड किस वातावरण में है। अगर हमें PROD में एक सुधार करने की आवश्यकता है, तो हमारे पास वर्तमान उत्पादन कोडबेस के साथ सिंक में एक समर्पित शाखा नहीं है। वही क्यूए के लिए चला जाता है - अगर हम इन-प्रोग्रेस कार्य को ड्रेज किए बिना क्यूए में एक त्वरित बदलाव को आगे बढ़ाना चाहते हैं master
, तो हमारे पास अब एक शाखा नहीं है जो क्यूए पर्यावरण की वर्तमान स्थिति को दर्शाती है।
हम प्रत्येक वातावरण में किस कोड का ट्रैक रख सकते हैं?
कुछ विकल्प जिन पर हम विचार कर रहे हैं:
- किस वातावरण में कौन सा कमिटमेंट है, इसका ट्रैक रखने के लिए git टैग का उपयोग करना
- प्रत्येक परिनियोजन पैकेज में बिल्ड द्वारा उपयोग किए गए गिट कमिट को एम्बेड करना