2012-04-25 10 views
6

मैं सॉफ़्टवेयर का एक टुकड़ा ढूंढ रहा हूं जिसे मुझे उम्मीद है कि किसी ने बनाया है। मैं इस सॉफ्टवेयर का वर्णन करने जा रहा हूं कि यह उम्मीद कर रहा है कि किसी ने इस तरह कुछ सुना है और मुझे सही दिशा में इंगित कर सकता है।गिट प्रॉक्सी जो कई रिमोट्स को धक्का देता है

मैं एक वेब ऐप विकसित कर रहा हूं जो हरोकू पर तैनात है। हेरोोकू की सीमाओं के कारण, मुझे एक ही रिपो के लिए चार (4) रिमोट गिट रेपो रखने की दुर्भाग्यपूर्ण स्थिति में रखा जा रहा है।

क्यों चार?

हमारे पास हेरोकू पर कई "ऐप्स" हैं। उत्पादन के लिए एक और कुछ "स्टेज" स्टेजिंग। ये सभी एक ही वास्तविक ऐप के लिए हैं, लेकिन हेरोकू पर वे अलग-अलग "ऐप्स" हैं, इसलिए हम उन्हें उत्पादन में धक्का देने से पहले स्टेजिंग पर चीजों को आजमा सकते हैं।

हरोकू पर प्रत्येक ऐप को अपना अलग गिट रेपो मिलता है, और master शाखा में हर बार एक नई प्रतिबद्धता को धक्का दिया जाता है, और master शाखा को स्वचालित रूप से तैनात करता है। हेरोोकू की यह नीति हमारी समस्या का क्रूक्स है। क्योंकि इसका मतलब है कि हमारे पास हेरोकू, और हमारे गिटहब रेपो पर 3 अलग-अलग प्रतिनिधि हैं।

4 अलग-अलग गिट रिमोट्स में समस्या क्यों है? क्योंकि इसका मतलब है कि जब आप नई प्रतिबद्धताओं को विकसित और बनाते हैं, तो आपको या तो (1) केवल एक रिमोट को धक्का देना पड़ता है या (2) सभी रिमोट्स को धक्का देता है।

करना (1) का मतलब है कि आप किस रिमोट को धक्का देना चाहते हैं। मुझे इस बारे में सोचना नफरत है। जब मैं विकसित करता हूं, मुझे रिमोट्स की परवाह नहीं है, मैं प्रतिबद्ध हूं और धक्का देता हूं और काम पर वापस आ जाता हूं। अगर मैं सर्वर 1 को स्टेजिंग में एक शाखा तैनात करना चाहता हूं, उदाहरण के लिए, मैं उस शाखा को staging_1 शाखा में विलय कर दूंगा और इसे दबा दूंगा। मुझे चुनना पसंद नहीं है कि किस रिमोट को धक्का देना है।

(1) का एक और नुकसान यह है कि आपके रिमोट सिंक से बाहर हो जाते हैं।

जो मैं चाहता हूं (2) है। मैं अपने सभी चार repos को धक्का देने के लिए हर धक्का कार्रवाई चाहते हैं।

लेकिन वहाँ उस के साथ 2 समस्याएं हैं:

समस्या 1: Heroku पर मचान "एप्स" को तैनात क्या master पर है। मैं नहीं चाहता कि वे ऐसा करें। मैं स्टेजिंग सर्वर गिट रेपो पर master शाखा में अपने रेपो में staging_1 शाखा को मैप करना चाहता हूं।

समस्या 2: मेरे कंप्यूटर को सभी 4 रिपोज़ पर धक्का देने से लंबा समय लगेगा। यहां तक ​​कि 1 हेरोकू पुश कार्रवाई भी एक लंबा समय लगता है। कभी-कभी 40 सेकंड लग सकते हैं।


प्रस्तावित समाधान

यहाँ मैं यही चाहता हूँ। मैं एक विशेष गिट सर्वर चाहता हूं जो प्रॉक्सी के रूप में कार्य करता है। जब भी मैं अपने स्थानीय कंप्यूटर से इस गिट सर्वर में धक्का देता हूं, तो यह समान शाखाओं को हमारे 4 रेपो में समांतर में धक्का देगा। इस तरह, मेरे स्थानीय कंप्यूटर के परिप्रेक्ष्य से, पुश तात्कालिक प्रतीत होता है, जबकि यह प्रॉक्सी सर्वर स्वचालित रूप से पृष्ठभूमि में हेरोोकू रिपोज़ से निपटता है।

यदि किसी भी 4 रिमोट्स को धक्का किसी भी कारण से विफल रहता है, तो मैं चाहता हूं कि यह प्रॉक्सी किसी तरह से रिपोर्ट करे, इसलिए मुझे पता चलेगा कि कुछ टूटा हुआ है और इसे ठीक कर सकता है।

इस प्रॉक्सी को एक और चीज करना होगा master मैपिंग।हर बार जब मैं staging_1 शाखा को धक्का दूंगा, तो यह सभी रिमोट्स पर staging_1 के रूप में इसे धक्का देगी, लेकिन स्टेजिंग सर्वर से संबंधित रिमोट तक यह उस शाखा को master के रूप में भी धक्का देगी, इसलिए हेरोोकू इसे तैनात करने के बारे में जानेंगे।

(यह बहुत दुख की बात है कि Heroku एक तरह से मुझे इस तरह एक प्रॉक्सी की जरूरत है कि में बनाया गया है, लेकिन वह क्या मैं से निपटने के लिए है।)

तो हो गया। यही वह समाधान है जो मैं चाहता हूं। क्या किसी को ऐसे कार्यक्रम के बारे में पता है?

+0

समस्या 1 द्वारा हल किया गया है: 'गिट पुश स्टेजिंग स्टेजिंग_1: मास्टर' - यानी अपनी स्थानीय स्टेजिंग_1 शाखा को स्टेजिंग रिमोट के मास्टर में धक्का देना। –

+0

और आप https://github.com/fastestforward/heroku_san एक तैनाती स्क्रिप्ट के साथ मदद करेंगे जो आपके लिए यह कर सकता है लेकिन फिर भी 4 प्रतिनिधि को धीमा कर देगा। –

उत्तर

0

यह मेरे लिए थोड़ा पागल लगता है। मेरे पास हेरोकू पर कई ऐप्स हैं जो अलग-अलग वातावरण चलाते हैं। मेरे पास एक गिथब रेपो है और फिर हेरोकू अलग-अलग वातावरण के लिए रिमोट करता है। मैं एक गिट शाखा भी बनाए रखता हूं जो हरोकू रिमोट्स में से एक से मेल खाता है।

तैनाती तो किया जाता है (के रूप में जॉन कहते हैं) के साथ:

git push heroku_remote local_branch:master 

मैं यहाँ इस बुनियादी दृष्टिकोण दस्तावेज है:

http://neilmiddleton.com/deploying-topic-branches-to-heroku/

हालांकि, अगर आप से पूरा स्वचालन के लिए की जरूरत है मैं क्या कह सकता हूँ आप अपने परीक्षण सूट पास होने पर एक गिट शाखा देखकर और फिर एक दूरस्थ शाखा (जैसे हीरोोक रिमोट) पर धक्का देकर TDDium जैसी सेवा का उपयोग कर सकते हैं।

http://neilmiddleton.com/continuous-deployment-with-heroku/

मैं यकीन है कि TDDium दृष्टिकोण आप दे देंगे कि तुम क्या सीआई के अतिरिक्त परत के साथ की जरूरत है, कर रहा हूँ।

1

एक नया भंडार बनाएं, जिसे आप धक्का देने के लिए धक्का दे सकते हैं, और जब आप इस रेपो में धक्का देते हैं तो परिवर्तनों को प्रसारित करने के लिए पोस्ट-प्राप्त हुक लिखते हैं।

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