आप
अनुरोध किया जैसा कि मैंने अपने संकलित कोड स्टोर करने के लिए एक ही रेपो उपयोग करने के लिए आपको सलाह नहीं देते।क्योंकि इसे स्रोत कोड के किसी भी राज्य से प्राप्त किया जा सकता है और यह जानकारी के अनजान लचीलापन होगा।
इसलिए, इस मामले में आप सीआई उपकरण के रूप में Git उपयोग करना चाहते हैं। आपको संकलित साइट के लिए एक और रेपो बनाना चाहिए और हर बार आपको इसकी आवश्यकता होती है।
मैं तुम्हें कोड के "उत्पादन" राज्य के लिए शाखा चयन करने के लिए सुझाव देते हैं। और जब आप उस शाखा में आते हैं - कोड का पुनर्निर्माण किया जाना चाहिए। आइए इसे "उत्पादन" नाम दें।
- निर्मित कोड के लिए अलग गिट रेपो बनाएं।
- इस कोड को अपने src repo में पोस्ट-प्रतिबद्ध हुक में रखें। यह उत्पादन शाखा में सभी कामों को संभालेगा, कोड को अस्थायी निर्देशिका में चेकआउट करेगा, निर्माण करेगा और परिवर्तन करेगा।
srcDir='../srcWorkTree'
buildedRepo='../buildedRepo'
if [ `git rev-parse --abbrev-ref HEAD` == "production" ]; then
echo "making builded code commit..."
mkdir -p $srcDir
# http://stackoverflow.com/questions/4479960/git-checkout-to-a-specific-folder
git checkout-index -a -f --prefix=$srcDir/
bundle exec jekyll build --source $srcDir --destination $buildedRepo
cd $buildedRepo
git add -A
commitInfo=$(git log -1 --pretty="%h %B")
git commit -m "autobuild for $commitInfo"
# git push
fi
एक और प्रकार
मैं लगता है सकते हैं, आप अपने उत्पादन सर्वर की पहुंच है। कम से कम आप उल्लेख करते हैं कि आपके पास गिट रेपो है। तो लक्ष्य कोड में अपना कोड बनाने के लिए पोस्ट-प्राप्त हुक बनाना उचित होगा। जैसा कि मैंने वर्णन किया है, स्थानीय मशीन पर इसे करने के बजाय यह अधिक स्पष्ट और सरल होगा।
मुझे लगता है कि इस रेपो क्योंकि आप सर्वर पर परिवर्तन करने के लिए संभावना नहीं होना चाहिए "नंगे" है।
हुक के बाद प्राप्त होता है:
#!/bin/sh
siteDir='/var/www/site'
tmpSrcDir='/var/www/site'
echo "**** [builder's post-receive hook]"
while read oldrev newrev refname
do
if [ $refname = refs/heads/production ]
then
GIT_WORK_TREE=$tmpSrcDir git checkout --detach $newrev
bundle exec jekyll build --source $tmpSrcDir --destination $siteDir
fi
done
exit 0
और कुछ टिप्पणियां
मैं देख रहा हूँ, आप अपने builded साइट स्टोर करने के लिए submodule उपयोग करने के लिए tryed। मैं इसकी सिफारिश नहीं करता हूं। कोई समझ नहीं है क्योंकि आपका स्रोत कोड निर्मित कोड पर निर्भर नहीं है।
आपके उत्तर के लिए धन्यवाद। मुझे डर है कि स्थिति के लिए अधिक हो सकता है, और मुझे गिट के साथ ऐसा करने का एक आसान तरीका खोजने की उम्मीद है, इसलिए मैं अब इस प्रश्न को खोलने जा रहा हूं। – Zaz