2013-07-23 10 views
7

स्थापित करने के लिए मैं जेकिल परिनियोजन के लिए गिट पोस्ट-प्राप्त हुक स्थापित करने के लिए निर्देशों के साथ http://jekyllrb.com/docs/deployment-methods/ निर्देशों का पालन करने का प्रयास कर रहा हूं, हालांकि, मुझे उनके लिए थोड़ा घना मिल रहा है। उस लिंक पर, वहाँ एक पैराग्राफ का कहना है किएक गिट पोस्ट-हुक हुक

एक दूरस्थ सर्वर हर बार जब आप के लिए तैनाती संभाल उस Git का उपयोग कर परिवर्तन धक्का करवाने के लिए है, तो आप जो सभी सार्वजनिक कुंजी है कि अधिकृत कर रहे हैं है एक उपयोगकर्ता खाते बना सकते हैं इसकी अधिकृत_की फाइल में तैनात करने के लिए। उस जगह में के साथ, की स्थापना के बाद प्राप्त होता है के रूप में इस प्रकार से किया जाता है हुक:

प्रश्न 1: यह मेरे लिए स्पष्ट है जहां 'उपयोगकर्ता खाता' (Github पर बनाया जाना चाहिए नहीं है दूरस्थ सर्वर पर?), और (प्रश्न 2) जहां यह authorized_keys फ़ाइल होगी। मेरे पास known_hosts फ़ाइल है जो मेरी स्थानीय मशीन पर मेरी स्थानीय मशीन पर जिथब आदि के लिए कुंजी है। क्या यह अधिकृत_की फाइल है?

निर्देश इस

laptop$ ssh [email protected] 
server$ mkdir myrepo.git 
server$ cd myrepo.git 
server$ git --bare init 
server$ cp hooks/post-receive.sample hooks/post-receive 
server$ mkdir /var/www/myrepo 

अनुदेश mkdir myrepo.git की तरह एक हुक के बाद प्राप्त की स्थापना के लिए कह पर जाने के एक छोटे से मेरे लिए स्पष्ट नहीं है। उदाहरण के लिए, मैंने अपनी जेकिल साइट को अपनी स्थानीय मशीन पर गिट संस्करण नियंत्रण में डाल दिया, और इसने मुझे यह रास्ता दिया /Users/me/Sites/nginxjekyll/_site/.git/

प्रश्न 3) क्या इसका मतलब यह है कि, mkdir myrepo.git निर्देश के बाद, मुझे बनाना चाहिए मेरे रिमोट सर्वर पर एक निर्देशिका mkdir /Users/me/Sites/nginxjekyll/_site/.git/? आगे बढ़ते, यह कहते हैं,

cp hooks/post-receive.sample hooks/post-receive 

हालांकि, मैं एक hooks/post-receive.sample फाइल कॉपी की जरूरत नहीं है? मेरी स्थानीय मशीन पर गिट रिपॉजिटरी में, मेरे पास पोस्ट-अपडेट.sample है लेकिन पोस्ट-प्राप्त.sample नहीं है। इसके अलावा, जब मैंने अपने रिमोट सर्वर पर mkdir /Users/me/Sites/nginxjekyll/_site/.git/ निर्देशिका बनाई, तो उसने पोस्ट-अपडेट.sample फ़ाइल नहीं बनाई।

यदि आपके पास कोई पल है तो क्या आप मेरे लिए इन निर्देशों को स्पष्ट कर सकते हैं। पहले ही, आपका बहुत धन्यवाद।

उत्तर

6

प्रश्न 1: वे दूरस्थ सर्वर पर उपयोगकर्ता का जिक्र कर रहे हैं।

प्रश्न 2: यह दो परिदृश्यों पर निर्भर करता है: 1. आपको अपने दूरस्थ उपयोगकर्ता को धक्का देने के लिए अपने स्थानीय उपयोगकर्ता की सार्वजनिक कुंजी जोड़नी होगी। 2. यदि किसी अन्य सर्वर पर तैनात करने के लिए एसएसएच की आवश्यकता होती है तो आपको स्थानीय उपयोगकर्ता को एक सार्वजनिक कुंजी जोड़ने की आवश्यकता होगी जो पोस्ट-प्राप्त हुक चलाता है। सबसे अधिक संभावना केवल 1 आपकी चिंता है और 2 इसलिए नहीं है क्योंकि रिमोट सर्वर रिमोट गिट रेपो और www सर्वर का घर होगा।

इसका मतलब है कि आप public_keys फ़ाइल में लिनक्स/यूनिक्स वातावरण में सार्वजनिक कुंजी जोड़ते हैं। यह फ़ाइल आमतौर पर /home/$USER/.ssh/authorized_keys में स्थित होती है। अधिकृत_कीज फ़ाइल उपयोगकर्ता के लिए known_hosts फ़ाइल के समान निर्देशिका में स्थित होती है।

प्रश्न 3: वे रिमोट गिट भंडार को कैसे सेट अप करते हैं, यह समझा रहे हैं। इसे आपके स्थानीय भंडार के समान पथ पर होने की आवश्यकता नहीं है।

ठीक है - अब यह स्पष्ट करने के लिए कि वास्तव में यहां क्या चल रहा है। ट्यूटोरियल आपको एक रिमोट रिपोजिटरी कैसे सेट अप करने के बारे में सिखा रहा है जो हर बार जब इसे धक्का दिया जाता है तो एक जैकिल इंस्टॉल करेगा।

इसका मतलब है कि यदि आपके पास जिथब रेपो है, तो आप वहां सर्वर-साइड हुक सेट नहीं कर सकते हैं। इसके बजाय आप अपने रिमोट सर्वर पर एक नया रिमोट स्थापित करेंगे। तो कहना है कि आप अपने सर्वर में (ssh के साथ आम तौर पर) लॉग इन करें, अपने पूर्ण पथ जानने के लिए या एक वातावरण चर में यह स्थापित करने के लिए pwd चलाएँ:

$DIR=`pwd` 

अब आप इस सर्वर पर एक नंगे रेपो बना सकते हैं:

git init --bare $DIR/<SOMEDIRNAME>.git 

अब आपके सर्वर पर रिमोट नंगे गिट रिपोजिटरी है। इसके बाद आपको हुक जोड़ने की ज़रूरत है जो इसे पुश प्राप्त करने पर आपकी जेकिल साइट को तैनात करने की अनुमति देती है। आपके द्वारा सूचीबद्ध साइट पर एक साधारण तैनाती है, लेकिन मूल रूप से यह सब कुछ कर रहा है _site dir सेवा वाले एचटीएमएल पेज बना रहा है, आप यह कई तरीकों से कर सकते हैं, मेरा सुझाव है कि आप इसे जितना संभव हो सके अपने उपयोगकर्ताओं को बाधित किए बिना करते हैं एक नमूना स्क्रिप्ट है जो ऐसी चीज कर सकती है:

#!/bin/bash 
# Assuming a directory structure for www: 
# $www_root/releases 
# $www_root/shared 
# $www_root/current 
# all releases go in releases dir as timestamps dirs 
# any logs or other shared items go in shared dir - shared/logs 
# current is a symlink to latest release 
unset GIT_DIR 
WWW_ROOT=/PATH/TO/WWW 
REPO_PATH=/PATH/TO/REPO 
REPO_BRANCH=master 
SITE_DIR=/PATH/TO/_SITE/DIR/IN/REPO 
DATE=$(date +"%Y%m%d%H%M") 

# get code 
if [ ! -d $WWW_ROOT/shared/git_maint ]; then 
    mkdir -p $WWW_ROOT/shared/git_maint 
    cd $WWW_ROOT/shared/git_maint 
    git clone $REPO_PATH $WWW_ROOT/shared/git_maint 
    git checkout master 
else 
    cd $WWW_ROOT/shared/git_maint 
    git pull 
    git checkout master 
fi 

# do deploy 
if [ ! -d $WWW_ROOT/releases/$DATE ]; then mkdir $WWW_ROOT/releases/$DATE; fi 
cp -ar $WWW_ROOT/shared/git_maint/$SITE_DIR $WWW_ROOT/releases/$DATE 
ln -s $WWW_ROOT/new_current $WWW_ROOT/releases/$DATE && mv $WWW_ROOT/new_current $WWW_ROOT/current 

exit 0 

ऐसा कुछ अच्छा तैनाती होगा। यदि आप इस स्क्रिप्ट को अपने रिमोट सर्वर पर नंगे रेपो हुक/पोस्ट-प्राप्त फ़ाइल में सहेजते हैं तो यह प्रत्येक बार रिपोजिटरी को धक्का दिया जाएगा। 755 hooks/post-receive तो अगर आप के साथ अपने Git रेपो के लिए इस नए दूरस्थ जोड़ने chmod:: बस यह निष्पादन योग्य बनाने के लिए याद

git remote add DEPLOY_PROD [email protected]:/path/to/bare/repo 

फिर git push DEPLOY_PROD - यह करने के लिए धक्का होगा अपने दूरस्थ और फिर अपने दूरस्थ रेपो इसके बाद के प्राप्त सक्रिय कर देगा हुक और उसके बाद नंगे रेपो को एक रखरखाव निर्देशिका में कॉपी करें जिसे लगभग किसी भी बिंदु पर उड़ाया जा सकता है। इस निर्देशिका का उपयोग साइट डीआईआर को रिलीज़ डीआईआर में करने के लिए किया जाता है और फिर यह मुख्य निर्देशिका से जुड़ा होता है।

बेशक यह सब अधिकतर ओवरकिल है और आप केवल एक तैनाती स्क्रिप्ट बना सकते हैं जो स्थानीय होस्ट से आपके सभी एसएसएच पर ऐसा करने के लिए चलाता है।

समस्या यह है कि आप इस पद्धति के लिए सीधे गिटूब से सर्वर साइड हुक चलाने में असमर्थ हैं, इसलिए आपको इसके आसपास काम करना होगा। मैं सुझाव दूंगा कि आप तैनाती रणनीति के रूप में कैपिस्ट्रानो को देखें - वर्तमान/रिलीज/साझा डीआईआर और git_maint dir उनकी स्कीमा से लिया जाता है, यह अच्छी तरह से काम करता है।

मुझे बताएं कि क्या आप यहां कोई मदद चाहते हैं, मेरे पास तैनाती और स्वचालित तैनाती रणनीतियों के विकास का बहुत अनुभव है, इसलिए आपकी स्थिति के आधार पर, चीज़ें अलग-अलग होंगी।

+0

धन्यवाद, मैं इसे आज़मा दूंगा और आपको बताऊंगा कि यह कैसे काम करता है। आपकी सहायता की सराहना। – Leahcim

+0

गिट रेपो में हुक निर्देशिका में कोई पोस्ट-प्राप्त फ़ाइल नहीं है। केवल 'applypatch-msg.sample post-update.sample pre-commit.sample pre-rebase.sample प्रतिबद्ध-msg.sample pre-applypatch.sample ready-commit-msg.sample update.sample' – Leahcim

+0

आप बना सकते हैं यह फ़ाइल - यह सिर्फ एक स्क्रिप्ट है जो गिट के बाद पैक प्राप्त करेगी। इसे पोस्ट-प्राप्त करने का नाम दें - गिट बाकी करेगी। – Michael

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