2013-03-04 9 views
11

अद्यतन प्राप्त करता है तो गीथब को रिमोट सर्वर पर पुश करें Github स्वचालित रूप से रिमोट सर्वर पर किसी भी अद्यतन को धक्का देने के लिए सेट अप क्या है?जब यह

यह गिथब पर एक कोडबेस बनाए रखने के लिए उपयोगी है, और उस वेबसाइट को उस कोडबेस से बाहर चलाने के लिए उपयोगी है।

  1. मेरे पास अपने कंप्यूटर पर मेरा रेपो है, यह वह जगह है जहां मैं काम करता हूं।

  2. मैं अपने स्थानीय रेपो पर अपने परिवर्तन करता हूं, और उन्हें अपने गिथब रेपो में डाल देता हूं।

  3. मैं अपने गीथब रेपो को अपने रिमोट सर्वर पर इन परिवर्तनों को धक्का देना चाहता हूं।

मैं पूरे दिन शोध कर रहा हूं, और 'हुक' ध्वनि का उपयोग कर उचित रहा हूं। शायद गीथब पर 'पोस्ट-प्राप्त' हुक का उपयोग करके जो मेरे रिमोट सर्वर पर पुश कमांड चलाता है।

कोई सुझाव?

उत्तर

10

जैसा कि मैं समझता हूं कि जिथब आपको "सत्य" हुक परिभाषित करने की अनुमति नहीं देता है। पोस्ट प्राप्त करने की तरह। इसके बजाय वे डेवलपर्स को webhook नामक कुछ प्रदान करते हैं। इसके साथ आप क्या कर सकते हैं जब भी आपके भंडार में धक्का होता है तो आपके द्वारा निर्दिष्ट किसी भी यूआरएल का वेब अनुरोध जारी होता है।

तो आप क्या कर सकते हैं: रिमोट गिट सर्वर पर एक वेबसर्वर सेट करें और पोस्ट-प्राप्त पर इसे http कॉल करने के लिए जिथब को कॉन्फ़िगर करें। जब भी जिथब आपके रिमोट सर्वर को सूचित करता है तो उसे गीथब से खींचें।

यहाँ देखें कैसे webhooks का उपयोग करने पर: https://help.github.com/articles/post-receive-hooks

पी.एस. एक सच्चे हुक मेचियानिज्म जिथब के लिए संभावित सुरक्षा भेद्यता हो सकता है क्योंकि यह आपको अपने सर्वर पर कस्टम कोड निष्पादित करने की अनुमति देता है। इसलिए उन्होंने कुछ ऐसा किया है जो आपको कुछ भी निष्पादित करने की अनुमति नहीं देता है लेकिन फिर भी आपको कुछ भी करने की अनुमति देता है।

7

उदाहरण देकर स्पष्ट करने Yervand के answer (upvoted), इस peligangit एक सरल HTTP सर्वर का एक उदाहरण के रूप में (है कि आप अपने अमेज़न-EC2 उदाहरण पर स्थापित कर सकते हैं) है, जो होगा पर विचार करें:

  • शुरू एक साधारण HTTP सर्वर।
  • यह नया करता

workflow

कि पुस्तकालय लाने होगा नीचे खींच, और फिर मूल/मास्टर पर मुख्य शाखा रीसेट एक GitHub webhook

  • से एक पद के लिए सुन।
    यह करने का एक तरीका है। (देखें githook.py)

    def hard_reset_repos(self): 
        self.server.source_repo.fetch([self.server.source_repo.origin]) 
        self.server.source_repo.reset(['--hard', self.server.source_repo.originMaster]) 
    
  • संबंधित मुद्दे