2011-01-25 7 views
19

मैं heroku के समान शुद्ध-गिट वर्कफ़्लो के साथ एक सर्वर स्थापित करने का प्रयास कर रहा हूं। I को गिट सेट करने में सहायता की आवश्यकता नहीं है, लेकिन सूचनात्मक उद्देश्यों के लिए, मैं gitolite का उपयोग कर रहा हूं। मैं इस प्रणाली के ऑपरेटिंग सिस्टम (उबंटू) में कस्टम हुक लिखना चाहता हूं ताकि जब किसी विशेष शाखा पर धक्का प्राप्त हो जाए, तो यह सभी ऑपरेटरों को करता है जो उसके अनुयायी करता है (रैक, मंगल, अपाचे (शुरू करने के लिए) स्थिर) मेरे मामले में पृष्ठों, आदि की सेवाव्यक्तिगत सर्वर पर Heroku- जैसे वर्कफ़्लो

किसी एक संसाधन की ओर मुझे बात कर सकते हैं यह करने के लिए या कम से कम शुरू करने के? एक गूगल खोज वास्तव में मदद करने के लिए नहीं मालूम था ...

उत्तर

28

ऐसा लगता है जैसे आप अपने गिट वर्कफ़्लो में किसी निश्चित बिंदु पर मनमानी कार्यक्षमता निष्पादित करना चाहते हैं। गिट हुक जाने का रास्ता है।

यदि आप किसी भी गिट रेपो (.git फ़ोल्डर के अंदर) देखते हैं, तो आपको hooks फ़ोल्डर दिखाई देगा। इसके अंदर विभिन्न नामों के साथ कई उदाहरण हुक फाइलें हैं। उपर्युक्त स्पष्टीकरण के आधार पर, आप post-receive हुक फ़ाइल को संपादित करना चाहते हैं, क्योंकि आपके रिमोट रेपो में एक नए रेफ को अपडेट करने के तुरंत बाद इसे तुरंत कॉल किया जाएगा (जिसके परिणामस्वरूप स्थानीय से पुश हो सकता है)। अधिक जानकारी के लिए, the official documentation on hooks पढ़ें या इसे शायद more approachable explanation पढ़ें।

आप एक हुक फ़ाइल में इच्छित शेल आदेश डाल सकते हैं।फ़ाइल नाम को post-receive.sample से post-receive पर बदलें, रैक, Mongrel, Apache, आदि शुरू करने के लिए आवश्यक आदेश जोड़ें, फिर फ़ाइल को त्वरित chmod +x post-receive के साथ निष्पादन योग्य बनाएं और आप सभी सेट हो गए हैं।

+0

धन्यवाद, यह वही है जो मुझे चाहिए! – sethvargo

+0

मैं थोड़ा सा झुका हुआ हूं कि मेरा जवाब नहीं चुना गया था, क्योंकि अद्यतन संस्करण में गिट-तैनाती का एक लिंक शामिल है, जो लेखक पूछता था ("शुद्ध गिट वर्कफ़्लो हेरोोकू के समान" - और एक स्पष्टीकरण यह टिप्पणियों में कैसे काम करता है), लेकिन मैं आपको एक अपवित्र भी दूंगा। :) – bhamby

+0

गिट-तैनाती एक दिलचस्प प्रोजेक्ट की तरह दिखती है, लेकिन ऐसा लगता है कि रूबी + कैपिस्ट्रानो जोर है। मुझे लगता है कि सेठ.वर्गो के सवाल का मुख्य अभियान था, गिट गतिविधि के आधार पर किसी के पास स्वचालित रूप से कार्यवाही कैसे होती है। उस प्रकाश में, गिट हुक के बारे में बुनियादी ज्ञान होने पर अधिक आम तौर पर लागू होता है। उपवास के लिए धन्यवाद। – semperos

19

आप देखा है ? Capistrano पर विकि से:

Capistrano एक उपयोगिता और ढांचे पर समानांतर में आदेशों को क्रियान्वित करने के लिए है एसएसएच के माध्यम सेएकाधिक रिमोट मशीनें। यह उपकरण रेक से भाग लेने के लिए एक साधारण डोमेन विशिष्ट भाषा का उपयोग करता है। रेक विश्व सी में बनाने के समान है और आपको कार्यों को परिभाषित करने की अनुमति देता है, जो को कुछ भूमिकाओं में मशीनों पर लागू किया जा सकता है। यह कुछ गेटवे मशीन के माध्यम से संचालन को वीपीएन और फ़ायरवॉल के पीछे करने की अनुमति देने के लिए सुरंग कनेक्शन का भी समर्थन करता है।

Capistrano मूल रूप वितरित वातावरण के लिए अनुप्रयोगों को सरल बनाने और वेब की तैनाती को स्वचालित करने के लिए डिजाइन किया गया था, और मूल रूप से आया रेल अनुप्रयोगों को विस्तृत करने के लिए डिज़ाइन किया गया कार्यों का एक सेट के साथ बंडल। परिनियोजन कार्य अब ( कैपिस्ट्रानो 2.0 के रूप में) ऑप्ट-इन और ग्राहकों को स्पष्ट रूप से "व्यंजनों को " तैनात करने के लिए "अपने व्यंजनों में" रखने की आवश्यकता है।

यह किसी भी प्रकार की प्रतिबद्धता या पोस्ट हुक पर आधारित नहीं है, हालांकि मुझे यकीन है कि आपको वास्तव में इसकी आवश्यकता है, तो आप ऐसा कुछ करने के लिए कुछ उदाहरण व्यंजनों को पा सकेंगे।

अद्यतन: शायद git-deploy (Capistrano के आधार पर) तुम क्या चाहते है:

धक्का-आधारित, Heroku की तरह अपने मेजबान पर तैनाती सक्षम करने के लिए अपने रिमोट भंडार पर उपयोगी Git हुक स्थापित करने के लिए एक उपकरण ।

+0

के पीछे इतिहास पढ़ें जो पूरी तरह से अप्रासंगिक है। मुझे ऐप को तैनात करने के बारे में जानने की आवश्यकता नहीं है, मुझे यह जानने की ज़रूरत है कि कस्टम प्रक्रियाओं को स्वचालित रूप से इन प्रक्रियाओं को शुरू करने के लिए कैसे करें जब भी ऐप को गिट – sethvargo

+6

के माध्यम से धक्का दिया जाता है आप अपने आवेदन की शुरुआत और रोक को नियंत्रित करने के लिए कैपिस्ट्रानो में कार्य बना सकते हैं सर्वर (रों)। तो नहीं, नहीं * पूरी तरह से * अप्रासंगिक। – bhamby

+0

हाँ, लेकिन मैं इसे सरल रेक या यहां तक ​​कि एक बैश स्क्रिप्ट के साथ भी कर सकता हूं – sethvargo

2

मेरे पास एक समान सेटअप है जहां मास्टर शाखा स्वचालित रूप से गिट पुश पर कैपिस्ट्रानो का उपयोग करके स्टेजिंग के रूप में तैनात की जाती है। उत्पादन शाखा से उत्पादन मैन्युअल रूप से तैनात किया जाता है।

सेटअप की आवश्यकता है कि आप सर्वर पर स्थानीय कैश प्रतिलिपि बनाने के लिए deploy.rb में set :deploy_via, :remote_cache का उपयोग करें। यदि अंतिम तैनाती के बाद से बदल दिया गया है तो यह नवीनतम कॉन्फ़िगरेशन के साथ कैपिस्ट्रानो चलाने में सक्षम होना है।

post-receive हुक स्क्रिप्ट:

#!/bin/bash 
while read oldrev newrev ref 
do 
     if [ "$ref" = "refs/heads/master" ] ; then 
       echo "Master branch pushed, deploying to staging" 
       # seams to be set to "." for hooks, unset to make things more normal 
       unset GIT_DIR 
       # deploy path, where "current", "releases", "shared" etc are 
       DEPLOYDIR="/home/user/deploy/staging" 
       # default path for :deploy_via :remote_cache is shared/cached-copy 
       cd "$DEPLOYDIR/shared/cached-copy" 
       # update cache to pushed revision, will be done by capistrano too 
       git fetch origin && git fetch --tags origin && git reset --hard "$newrev" 
       # load rvm 
       source ~/.rvm/scripts/rvm 
       rvm use 1.9.2 
       # make sure correct gems are installed 
       # this will also create a .bundle directory 
       bundle install --gemfile Gemfile --path "$DEPLOYDIR/shared/bundle" --deployment --without development test 
       # run capistrano 
       # if you use deploy:migrations instead of deploy you should probably add 
       # after "deploy:migrations", "deploy:cleanup" 
       # to your deploy.rb 
       bundle exec cap staging deploy:migrations 
     fi 
done 

:remote_cache बिना एक सरल सेटअप भी संभव है, लेकिन यह पिछले (वर्तमान में तैनात) विन्यास और तेजी के साथ Capistrano चलेंगे में थोड़ा और अधिक नाजुक होने के लिए।

post-receive हुक स्क्रिप्ट:

#!/bin/bash 
while read oldrev newrev ref 
do 
     if [ "$ref" = "refs/heads/master" ] ; then 
       echo "Master branch pushed, deploying to staging" 
       # seams to be set to "." for hooks, unset to make things more normal 
       unset GIT_DIR 
       source ~/.rvm/scripts/rvm 
       rvm use 1.9.2 
       cd /home/user/deploy/staging/current && bundle exec cap staging deploy:migrations 
     fi 
done 
5

मैं सिर्फ https://github.com/mislav/git-deploy पर्दाफाश किया है, जो मैं वास्तव में क्या चाहता था। मैं दूसरे जवाब को "सही" के रूप में छोड़ने जा रहा हूं (क्योंकि यह उस समय सबसे अच्छा था), लेकिन अब मैं गिट-तैनाती का उपयोग कर रहा हूं :)