2011-02-09 14 views
8

मेरा सेटअप एक विंडोज एक्सएएमपीपी सर्वर है, कर्ल सक्षम है, और गिट और हडसन स्थापित है। हडसन चुनाव हर मिनट परिवर्तनों को देखने के लिए गिट करते हैं, और यदि उन्हें पाता है, तो यह एक निर्माण बनाता है। मैं इस परीक्षण का उपयोग अपने परीक्षण सर्वर के रूप में करता हूं। यह ठीक काम करता है।गिट पोस्ट-प्राप्त हुक काम नहीं कर रहा

मैं अपने केंद्रीय रिमोट रिपोजिटरी पर पोस्ट-प्राप्त हुक सेट अप करना चाहता हूं जो हडसन के बल निर्माण कार्य को चलाता है।

मैंने अपने केंद्रीय गिट भंडार में हुक निर्देशिका में "पोस्ट-प्राप्त" नामक एक पोस्ट-प्राप्त फ़ाइल बनाई है, जिसे डेवलपर्स की स्थानीय शाखाओं से धक्का दिया जाता है। वे प्रत्येक केंद्रीय भंडार पर अपनी शाखा में धक्का देते हैं। मैं प्रत्येक धक्का के तुरंत बाद पोस्ट-प्राप्त बिल्ड को चलाने के लिए हर हडसन पोल गिट के बजाय दौड़ना चाहता हूं।

जब मैं रिमोट सर्वर पर खोल खोलता हूं और हुक फ़ोल्डर में "पोस्ट-प्राप्त" चलाता हूं, तो यह चलता है। इसे तब नहीं कहा जा रहा है जब लोग इसे स्थानीय भंडार प्रतियों से केंद्रीय केंद्र में ले जाते हैं।

शायद मैं इस अधिकार को समझा नहीं रहा हूं, लेकिन मैं गिट को समझता हूं। जब मैं एक खोल खोल सकते हैं और इस चलाने

#!/bin/sh 
curl http://myserver.com:8080/hudson/job/myjobname/build?token=mytoken 

फिर,, यह काम करता है, लेकिन जब कोई इसे करने के लिए धक्का, कुछ भी नहीं एक मिनट या उससे कम हो जाता है जब तक, होता है:

बाद प्राप्त कोड दो पंक्तियों है द्वारा, हडसन को पता चलता है कि गिट बदल गया था, और फिर यह बनाता है।

मुझे आवश्यकता होने पर स्पष्ट करने में खुशी है। कोई भी मदद बहुत ही सराहनीय होगी।

संपादित करें: इसके साथ खेलने के बाद, मुझे लगता है कि पोस्ट-प्राप्त निष्पादन निष्पादित नहीं हो रहा है क्योंकि रेफरी को कुछ अपडेट नहीं किया जा रहा है? गिट प्रलेखन का कहना है कि

यह सभी रेफरी अपडेट होने के बाद रिमोट रिपोजिटरी पर निष्पादित होता है।

क्या इसका मतलब यह नहीं है कि कुछ भी अपडेट नहीं होता है, तो यह निष्पादित नहीं होगा? और यदि ऐसा है, तो मुझे यकीन है कि चीज़ें वैसे भी अपडेट हो रही हैं, इसलिए इसे लागू नहीं करना चाहिए।

यहां मेरी प्रक्रिया है: स्थानीय रूप से संपादन करें। संपादन संपादित करें। 'हेब्रैंच' नामक रिमोट शाखा में मेरे सिर से पुश करें (मास्टर शाखा नहीं, जिसे चेक आउट किया गया है) यह वह बिंदु है जहां मैं अपना हुक निष्पादित करना चाहता हूं।

+0

उपयोगकर्ता अपने Git डेमॉन चलाने वाले स्क्रिप्ट को निष्पादित करने की अनुमति है के बजाय हुक सर्वर साइड? – jweyrich

+0

सुनिश्चित नहीं है। जब मैं इसे गिट बैश के माध्यम से चलाता हूं तो यह निष्पादित करता है, लेकिन जब मैं इसे धक्का देता हूं तो ऐसा नहीं होता है। मैं उन अनुमतियों की जांच कैसे करूं? – spanky

+0

सही अनुमति उस तरीके पर निर्भर करती है जिस पर आप अपना भंडार साझा कर रहे हैं, और वास्तविक कॉन्फ़िगरेशन। हालांकि, msquared आपको सभी उपयोगकर्ताओं/समूहों को निष्पादन योग्य अनुमति देने का तरीका बताता है, इसलिए यदि समस्या वास्तव में है तो इसे काम करना चाहिए। – jweyrich

उत्तर

3

ये सभी उत्तर उपयोगी हैं, लेकिन यह पता चला है कि मुझे अपने पैथ चर में गिट की "बिन" निर्देशिका की आवश्यकता है। मेरे पास केवल "cmd" निर्देशिका थी। c:\my_path_to_git\git\bin पाथ में जोड़ा गया और यह ठीक काम करता है। मुझे यह जवाब परीक्षण और त्रुटि से मिला और अपाचे त्रुटि लॉग को देख रहा था। आपकी मदद के लिए आप सभी को शुक्रिया!

11

कृपया जांचें कि आपकी फ़ाइल के पास निष्पादन योग्य अधिकार हैं या नहीं। अन्यथा इसे निष्पादित नहीं किया जा सकता है। rwxr-xr-x की तरह कुछ होना पर्याप्त होना चाहिए।

आप के साथ

$ chmod +x /path/to/post-receive 
+0

क्या वह था। यह अब rwxr-xr-x है, और याद रखें कि यह गिट बैश खोल से निष्पादित कर रहा था, लेकिन अभी भी पुश के माध्यम से अपने आप को निष्पादित नहीं कर रहा है। – spanky

1

पूर्ण पथ का उपयोग करने में कर्ल करने की कोशिश करो फ़ाइल के बाद प्राप्त लापता बिट जोड़ सकते हैं, के रूप में पथ जब हाथ से स्क्रिप्ट चलाने की तुलना में अलग हो सकता है।

आप चलाने का वातावरण है क्या देखना चाहते हैं तो स्क्रिप्ट के बाद प्राप्त होता है:

#!/bin/sh 
export > file 

या बस (यह env दिखाई देंगे।चर रेपो में धक्का देने के बाद)

#!/bin/sh 
export 

इसके अलावा, मुझे यकीन है कि कैसे खोल शेयरों को क्रियान्वित करने खिड़कियों पर काम करता है नहीं कर रहा हूँ, तो #!/path/to/स्थापित/बजाय # की श!/bin/श

मदद कर सकता है
+0

सुनिश्चित नहीं है कि कर्ल का पूरा पथ क्या है। मैं यहाँ पूरी तरह से खो गया हूँ। क्या "श" पथ गिट के साथ आया था? विंडोज भ्रमित है। जब मैं निर्यात चलाता हूं, तो यह ठीक है, जब मैं मैन्युअल रूप से पोस्ट-प्राप्त स्क्रिप्ट चलाता हूं, लेकिन जब मैं धक्का देता हूं तो स्क्रिप्ट चलती नहीं है, इसलिए यह वास्तव में मेरी मदद नहीं करता है। कर्ल पथ सहायक होगा। मेरे पास सी है: \ xampp \ php मेरे पथ में, मुझे और क्या चाहिए? – spanky

+0

आपको यह पता लगाने की आवश्यकता है कि कर्ल कहां स्थापित है और अपनी स्क्रिप्ट में कर्ल करने के लिए पूर्ण पथ का उपयोग करें। * खोल * (गिट के खोल) को मैन्युअल रूप से चलाएं और "कौन सा कर्ल" टाइप करें - यह कुछ/usr/bin/curl जैसे प्रिंट करेगा। अपनी लिपि में जो कुछ भी प्रिंट करता है उसके साथ "कर्ल" बदलें। – ebneter

5

रेपो को धक्का देने के लिए आप किस परिवहन विधि का उपयोग कर रहे हैं?

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

+0

ओह मैन। मैं http का उपयोग कर रहा हूँ। असमर्थ रहे हैं। जो कुछ भी मेरे पास रेपो में है, उसे बर्बाद किए बिना किसी भिन्न संस्करण में स्विच करने पर कोई सलाह? मैं भी खुद को देख लूंगा। – spanky

+0

यदि आप http://www.kernel.org/pub/software/scm/git/docs/git-http-backend.html का उपयोग करते हैं तो भी आप HTTP का उपयोग कर सकते हैं लेकिन मुझे इसे सेट करने की कोशिश करने के बारे में कुछ भी नहीं पता विंडोज। आप मूल विंडोज सर्वर या साइगविन के साथ एक एसएसएच सर्वर भी सेट कर सकते हैं, जिसके साथ मुझे कोई अनुभव नहीं है। जैसा कि आपने पाया है, विंडोज़ गिट रेपो होस्ट करने के लिए बिल्कुल दोस्ताना ओएस नहीं है। – Arrowmaster

+0

@Arrowmaster आपकी टिप्पणी HTTP पर एक खिलौना भंडार स्थापित करने के लिए मेरे लिए उपयोगी साबित हुई और मुझे हुक को भी निष्पादित करने की आवश्यकता थी। धन्यवाद! –

1

मुझे लगता है कि सरल जवाब है कि आप की सामग्री को स्थानांतरित करने की आवश्यकता के बाद प्राप्त होता है ग्राहक के पक्ष

+1

स्टैक ओवरफ़्लो में आपका स्वागत है! यह वास्तव में एक टिप्पणी है, जवाब नहीं। थोड़ा और प्रतिनिधि के साथ, [आप टिप्पणियां पोस्ट करने में सक्षम होंगे] (// stackoverflow.com/privileges/comment)। – Mat

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