2010-07-09 10 views
22

यह वास्तव में मेरे पहले के प्रश्न पर उपजी है जहां उत्तर में से एक ने मुझे आश्चर्यचकित कर दिया कि लोग विकास के लिए विभिन्न तरीकों से एसएमएम/भंडार का उपयोग कैसे कर रहे हैं।आपने कभी सोचा है कि स्रोत भंडार का सबसे अच्छा उपयोग क्या है?

उत्तर

22

Pre-tested commits

से पहले (TeamCity, प्रबंधक का निर्माण):

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

पूर्व परीक्षण किया करता लिए हडसन के साथ मेरे कार्यप्रवाह तीन अलग-अलग Git संग्रह शामिल है::

  • अपने स्थानीय रेपो (स्थानीय)

    के बाद (का उपयोग कर Git की तरह एक DVCS, कि एक स्रोत भंडार है) ,

  • विहित/केंद्रीय रेपो (मूल)
  • और मेरे "दुनिया पठनीय" (फ़ायरवॉल के अंदर) रेपो (सार्वजनिक)।

पूर्व परीक्षण किया करता के लिए, मैं एक लगातार बदलते "पु" (संभावित अपडेट) दुनिया पठनीय रेपो पर बुलाया शाखा का उपयोग करें।
हडसन के अंदर मैंने एक ऐसी नौकरी बनाई जिसने "पु" शाखा में बदलाव के लिए विश्व-पठनीय रेपो (सार्वजनिक) को चुना और अद्यतनों को धक्का देने पर निर्माण बंद कर देगा।

मूल करने के लिए स्थापना के समय से एक परिवर्तन लेने के लिए मेरे कार्यप्रवाह है:

* hack, hack, hack 
* commit to local/topic 
* git pup public 
* Hudson polls public/pu 
* Hudson runs potential-updates job 
* Tests fail? 
     o Yes: Rework commit, try again 
     o No: Continue 
* Rebase onto local/master 
* Push to origin/master 

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


(रूपांतर) Private Build (डेविड Gageot, Algodeal)

ऊपर से एक ही सिद्धांत है, लेकिन निर्माण को विकसित करने के लिए इस्तेमाल एक से एक ही कार्य केंद्र पर किया जाता है, लेकिन पर एक क्लोन रेपो:

लंबी अवधि में सीआई सर्वर का उपयोग कैसे न करें और स्थानीय स्तर पर बिल्डिंग में बढ़ते समय में कमी का सामना न करें?

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

स्थिरता के बारे में क्या?
कार्यशील निर्देशिका से एक सरल 'git pull' करना, डेल्टा के digests का उपयोग करके, परिवर्तनों को पहले से साझा साझा भंडार पर धक्का दिया जाएगा।
कुछ भी नहीं करना है। फिर से प्रभावशाली।

बेशक, जबकि दूसरी निर्देशिका में निर्माण चल रहा है, हम कोड पर काम कर सकते हैं। इंतजार करने की कोई ज़रूरत नहीं है।

अब हमारे पास कोई रखरखाव नहीं है, कोई अतिरिक्त स्थापना नहीं है, आईडीई पर निर्भर नहीं है, एक कमांड लाइन के साथ भाग गया है। साझा भंडार में कोई और टूटा हुआ निर्माण नहीं। हम अपने सीआई सर्वर रीसायकल कर सकते हैं।

हां। आपने अच्छी तरह से सुना है। हमने अभी एक सर्वर रहित सीआई बनाया है। असली सीआई सर्वर की हर अतिरिक्त सुविधा मेरे लिए शोर है।

#!/bin/bash 
if [ 0 -eq `git remote -v | grep -c push` ]; then 
    REMOTE_REPO=`git remote -v | sed 's/origin//'` 
else 
    REMOTE_REPO=`git remote -v | grep "(push)" | sed 's/origin//' | sed 's/(push)//'` 
fi 

if [ ! -z "$1" ]; then 
    git add . 
    git commit -a -m "$1" 
fi 

git pull 

if [ ! -d ".privatebuild" ]; then 
    git clone . .privatebuild 
fi 

cd .privatebuild 
git clean -df 
git pull 

if [ -e "pom.xml" ]; then 
    mvn clean install 

    if [ $? -eq 0 ]; then 
    echo "Publishing to: $REMOTE_REPO" 
    git push $REMOTE_REPO master 
    else 
    echo "Unable to build" 
    exit $? 
    fi 
fi 

Dmitry Tashkinov, जो एक interesting question on DVCS and CI है, पूछते हैं:

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

@Dmitry: मैं उपेक्षा और न ही मोड़ नहीं है प्रक्रिया Martin Fowler in his ContinuousIntegration entry द्वारा वर्णित
लेकिन आप को एहसास है कि DVCS adds publication as an orthogonal dimension to branching
serverless सीआई दाऊद द्वारा वर्णित है।। मार्टिन द्वारा विस्तृत सामान्य सीआई प्रक्रिया का केवल एक कार्यान्वयन: सीआई सर्वर रखने के बजाय, आप एक स्थानीय प्रतिलिपि जहां स्थानीय सीआई चलाते हैं, फिर आप "वैध" कोड को केंद्रीय रेपो पर धक्का देते हैं।

@ वॉनसी, लेकिन विचार सीआई नहीं चलाने के लिए था स्थानीय रूप से विशेष रूप से मशीनों के बीच संक्रमण में कुछ याद करने के लिए नहीं।
जब आप तथाकथित स्थानीय सीआई का उपयोग करते हैं, तो यह सभी परीक्षणों को पास कर सकता है क्योंकि यह स्थानीय है, लेकिन बाद में दूसरी मशीन पर टूट जाता है।
तो क्या यह अभिन्न है? मैं यहां बिल्कुल आलोचना नहीं कर रहा हूं, सवाल मेरे लिए मुश्किल है और मैं समझने की कोशिश कर रहा हूं।

@ डिमिट्री: "तो यह अभिन्नता है"?
यह एकीकरण का एक स्तर है, जो सभी मूल जांच (जैसे प्रारूप समस्या, कोड शैली, मूल स्थैतिक विश्लेषण पहचान, ...)
चूंकि आपके पास उस प्रकाशन तंत्र है, तो आप उस तरह की श्रृंखला को श्रृंखलाबद्ध कर सकते हैं यदि आप चाहें तो सीआई के दूसरे सीआई सर्वर पर। बदले में, सर्वर "केंद्रीय" रेपो में स्वचालित रूप से धक्का दे सकता है (यदि यह अभी भी तेज़ है)।

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

+0

यह मेरे लिए एक गरीब आदमी का PQM तरह लग रहा है (एक डी एस सी एम केंद्रित अवधारणा मैं पहली बार बाज़ार के खिलाफ लागू किया देखा है, लेकिन मैं लक्षित कर Git भी मौजूद कार्यान्वयन का मानना ​​है)। मतदान के विशिष्ट स्रोत भंडार बनाम एकमात्र वास्तविक अंतर स्थापित किया जा रहा है (प्रमाणीकृत) अनुरोध जो परीक्षण और विलय के लिए किसी भी दूरस्थ भंडार और शाखा निर्दिष्ट कर सकते हैं। –

+0

ठीक है, अब यह स्पष्ट है, व्यापक उत्तर के लिए धन्यवाद। डेविड गैजोट सर्वरलेस सीआई उद्धृत करने के लिए –

+0

+1। अछा सुझाव। अच्छा लड़का भी;) – romaintaz

3

निश्चित रूप से Polarion ट्रैक & विकी ...

पूरे बग पर नज़र रखने और विकी डेटाबेस तोड़फोड़ में संग्रहित है एक पूर्ण पुनरीक्षण इतिहास रखने के लिए सक्षम होने के लिए।

http://www.polarion.com/products/trackwiki/features.php

5

मेरा पसंदीदा? डेटास्टोर को निर्देशिका संरचना के रूप में प्रस्तुत करके पेड़-संरचित डेटा को ट्रैक करने के लिए बाज़ार (एक बहुत अच्छी तरह से विचार-विमर्श स्पष्ट नामकरण के साथ एक डीएससीएम) का उपयोग किया गया एक अप्रकाशित उपकरण।

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

संबंधित मुद्दे