मैं नए साल के लिए हमारे टीम फाउंडेशन सर्वर रोलआउट के लिए स्रोत नियंत्रण संरचना को मानकीकृत करने पर काम कर रहा हूं। मैंने कोडप्लेक्स पर उपलब्ध Microsoft Team Foundation Server Branching Guidance दस्तावेज़ों का उपयोग करके शुरू किया है।टीम फाउंडेशन सर्वर स्रोत नियंत्रण संरचना
मैं प्रस्तावित संरचना के बारे में कुछ विशिष्ट प्रश्नों के कुछ प्रतिक्रिया और उत्तर प्राप्त करने की उम्मीद कर रहा था। जब टीएफएस में स्रोत नियंत्रण की संरचना की बात आती है, तो मैंने सीखा है कि चुनने के लिए बहुत सारे "मानक" हैं कि वास्तव में मानक नहीं है।
सबसे पहले, मैं निर्णय और उपयोग की रूपरेखा और वर्णन करूंगा।
$/
{Team Project}/
{Subproject}/
Development/
Trunk/
Source/
Tests/
Sandcastle/
TeamBuildTypes/
{Build Name}/
Branches/
{Branch Name}/
Source/
Tests/
Sandcastle/
TeamBuildTypes/
{Build Name}/
Integration/
Source/
Tests/
Sandcastle/
TeamBuildTypes/
{Build Name}/
Production/
Releases/
{Release Version}/
Source/
Tests/
Sandcastle/
TeamBuildTypes/
{Build Name}/
Branches/
{Branch Name}/
Source/
Tests/
Sandcastle/
TeamBuildTypes/
{Build Name}/
सामान्य तर्क है कि एक टीम परियोजना एक उत्पाद या उपकरण सूट के रूप में या तो एक तार्किक परियोजना (जहां कोई {Subproject}
प्रवेश होगा) या अनेक संबंधित परियोजनाओं को शामिल कर सकते हैं। तीन प्रमुख कंटेनर को Development
, Integration
, और Production
कहा जाता है।
Development
कंटेनर ट्रंक के भीतर, Source
फ़ोल्डर में उत्पाद बनाने वाले दोनों परियोजनाओं के प्रावधान हैं, Tests
फ़ोल्डर में उपलब्ध यूनिट परीक्षणों के साथ। Trunk
फ़ोल्डर के भाई Branches
फ़ोल्डर के माध्यम से शाखाकरण कंटेनर के रूप में कार्य करता है, जो शाखाओं के साथ ट्रंक में बहुमत का विकास होगा। एक या अधिक समाधान फाइलें Trunk
के भीतर रहेंगी, जिससे उस स्तर की शाखाओं को समाधान, स्रोत और यूनिट परीक्षणों को कैप्चर करने की अनुमति मिल जाएगी।
Integration
कंटेनर जिसे अक्सर गैर-टीएफएस कार्यान्वयन में "मुख्य" कहा जाता है, का उपयोग स्थिर और टेस्टेबल बिल्ड बनाने के लिए Development
से परिवर्तनों को एकीकृत करने के लिए किया जाता है। एक बार टेस्ट करने योग्य उत्पाद प्राप्त होने के बाद इसे Development
कंटेनर से शाखा के रूप में बनाया गया है। इस कंटेनर से निर्मित हमारे परीक्षण पर्यावरण और लोड परीक्षण पर्यावरण के लिए उपयोग किया जाएगा। हम टेस्टेबल बिल्डों के साथ लोड परीक्षण को शामिल करना चुनते हैं ताकि हम प्रदर्शन में बदलावों की निगरानी कर सकें, जो किसी भी अनियमितताओं में योगदान देने वाले परिवर्तनों को तेज़ी से अलग करने में सक्षम हो।
Production
का उपयोग प्री-प्रोडक्शन और उत्पादन गुणवत्ता के निर्माण के लिए किया जाता है। रिलीज के लिए एक स्थिर निर्माण की सिफारिश की जाने के बाद इसे शुरुआत में Integration
कंटेनर से शाखा के रूप में बनाया गया है। Releases
फ़ोल्डर के भीतर, "रिलीज द्वारा शाखा" संरचना का पालन किया जाता है, जो एक ही स्थान पर स्नैपशॉटिंग और अलगाव प्रदान करता है। (उदाहरण के लिए, Release 1.1
प्री-प्रोडक्शन बिल्ड के लिए तैयार है, स्थिर Integration
कंटेनर फ़ोल्डर में Production/Releases
संरचना में ब्रांच किया गया है। बाद में आरसी और आरटीडब्ल्यू/आरटीएम को इस फ़ोल्डर में भी बढ़ावा दिया जाता है।) एक शाखा संरचना जैसा कि Branches
कंटेनर में देखा गया है भी मौजूद है। यह "हॉटफिक्स" के लिए अनुमति देता है, आमतौर पर एक संशोधन मार्कर (Major.Minor.Revision)। शाखा को वर्तमान रिलीज से बनाया गया है और नए संशोधन मार्कर में वापस विलय किया गया है - जैसे Release 1.1.1
। स्वीकृति पर चेंजसेट Development
कंटेनर Trunk
पर एकीकृत किया जाएगा।
हमें लगता है कि यह संरचना मजबूती और जटिलता के बीच एक उचित संतुलन है। लेकिन कुछ परेशान सवाल हैं कि मैं मॉडल में तर्कसंगत रूप से फिट नहीं हो सकता। वे हैं:
टीम का निर्माण - Development
और Integration
कंटेनर शुरू में बाहर शुरू कर देंगे के रूप में किया जा रहा है हर रात को, बनाता है अंत में सतत एकीकरण (सीआई) करने के लिए घूम रहा है।उत्पादन कंटेनर मैन्युअल रूप से बनाया जाएगा।
निर्माण परिभाषा कहां रहनी चाहिए?संपादित करें - कुछ प्रतिक्रियाओं के आधार पर, TeamBuildTypes फ़ोल्डर को ट्रंक में ले जाया गया है और उपयुक्त कंटेनर में ब्रांच किया गया है। हालांकि, यह एक नया प्रश्न (निम्न) का कारण बनता है।टीमबिल्ड टाइप्स फ़ोल्डर को उनके उचित कंटेनर में रखते हुए, क्या इसका मतलब यह है कि सभी बिल्ड परिभाषा उचित फ़ोल्डरों के बीच पुन: उत्पन्न की जाएगी? उदाहरण के लिए, विकास की गुणवत्ता के निर्माण के साथ-साथ टेस्टेबल बिल्ड इत्यादि के लिए एक बिल्ड परिभाषा भी है, जो सभी संरचनाओं में सभी टीमबिल्ड टाइप फ़ोल्डर्स में रहती हैं।
प्रलेखन पीढ़ी - हम सैंडकैसल का उपयोग प्रलेखन उत्पन्न करने के लिए। विशेष रूप से, हम आउटपुट प्रबंधित करने के लिए Sandcastle Help File Builder का भी उपयोग करते हैं। यह एसएफएचबी के लिए विशिष्ट प्रारूप में एक प्रोजेक्ट फ़ाइल बनाता है।
क्या जनरेटिंग स्रोत नियंत्रण संरचना में संग्रहीत किया जाना चाहिए?
प्रत्येक कंटेनर के लिए दस्तावेज तैयार किए जाने चाहिए, या क्या यह केवल पूर्व-उत्पादन और उत्पादन गुणवत्ता के निर्माण के लिए मूल्य रखता है?
तेजी से स्थानीय निर्माण के समय को संरक्षित करने के लिए, दस्तावेज़ीकरण निर्माण को बिल्ड परिभाषा के स्वामित्व में होना चाहिए?
एसएचएफबी-विशिष्ट फाइलें कहां रहेंगी? मेरा प्रारंभिक स्याही इसेमैं सिफारिशों से सहमत हूं कि यहSource
औरTests
फ़ोल्डर में एक सहकर्मी के रूप में रखना है।Source
औरTests
पर एक सहकर्मी होगा। इस परिवर्तन को दर्शाने के लिए चित्र बदल गया।
तीसरी पार्टी बाइनरी
बाइनरी (नियंत्रण, पुस्तकालयों, आदि) स्रोत नियंत्रण में संग्रहित किया जाना चाहिए?
यदि हां, तो क्या यह स्वयं की टीम परियोजना होनी चाहिए?
जनरल प्रलेखन - ऐसी जरूरतों, डिजाइन दस्तावेजों, परीक्षण योजना, आदि के रूप में गैर-उत्पन्न प्रलेखन, स्रोत नियंत्रण संरचना में एक फ़ोल्डर से परिलक्षित करने के लिए नहीं जा रहे हैं। मेरे डेवलपर्स और साथियों के साथ कुछ शोध और चर्चा के बाद, टीम एक्सप्लोरर में अंतर्निहित दस्तावेज़ फ़ोल्डर का उपयोग करके अधिक लाभ मिलता है, क्योंकि यह टीम प्रोजेक्ट पोर्टल के भीतर संरचना को प्रतिबिंबित करता है और कुछ (व्यवसाय) उपयोगकर्ताओं को सीखने की अतिरिक्त जटिलता की आवश्यकता नहीं होती है टीएफएस के स्रोत नियंत्रण पहलू।
मैं संरचना को अद्यतन कर दूंगा क्योंकि मुझे एक स्पष्ट तस्वीर प्रदान करने के लिए प्रश्नों के उत्तर मिलते हैं। मैं संभावित परिवर्तनों से संबंधित किसी अन्य टिप्पणी का भी स्वागत करता हूं। यदि मेरे कोई अन्य प्रश्न हैं, तो मैं इस पोस्ट को संशोधित करना सुनिश्चित कर दूंगा।
संपादन:
स्पष्टीकरण।
Source
औरTests
फ़ोल्डर्सIntegration
कंटेनर के साथ भी रहते हैं।दोनों मीका और जोश ने तृतीय पक्ष द्विआधारी के संबंध में महान अंक लाए। इस मुद्दे के बारे में प्रश्न जोड़ा गया।
दस्तावेज़ीकरण उत्पादन धीमा हो सकता है। इस बारे में प्रश्न जोड़ा गया है कि दस्तावेज निर्माण का एक विशिष्ट टीम बिल्ड प्रकार के स्वामित्व में होना चाहिए या नहीं।
जोड़ा गैर उत्पन्न प्रलेखन से संबंधित संकल्प, ऐसी जरूरतों, डिजाइन दस्तावेजों, परीक्षण योजना, आदि
जोड़ा गया निर्माण defintions के लिए TeamBuildTypes फ़ोल्डर से संबंधित संकल्प के रूप में।
विभिन्न प्रतिक्रियाओं के आधार पर, TeamBuildTypes फ़ोल्डर को ट्रंक/शाखा स्तर पर ले जाया गया।
आपने फाउंडेशन गलत वर्तनी :) – thmsn
यह वास्तव में एक महान लेआउट और स्पष्टीकरण है। – Micah
उह! धन्यवाद, थॉमसन! –