2012-09-29 18 views
94

क्या केवल openhift पर गिट रेपो होना जरूरी है? मेरे पास पहले से ही बिटबकेट/जिथब गिट रेपो है और केवल वहां धक्का देना पसंद करेगा। क्या मैं बस इसमें हुक कर सकता हूं ताकि openshift सूचना प्राप्त हो?क्या मैं अपने मौजूदा गिट रेपो का उपयोग openshift के साथ कर सकता हूं?

या सरलीकरण के लिए, मैं केवल जिथब पर धक्का देता हूं, लेकिन जब मैं तैनाती करना चाहता हूं, तो मैं openshift के साथ कुछ करता हूं?

मैंने this की जांच की लेकिन यह मुझे भ्रमित कर दिया: यह बाहर निकलने और नए (openshift) गिट विलय करने के बारे में बात कर रहा है?

+6

क्या आप इस प्रश्न को प्रमाणित कर सकते हैं? समझना बहुत मुश्किल है। –

उत्तर

221

मुझे लगता है कि आप अभी तक पर्याप्त गिट का उपयोग करने के लिए उपयोग नहीं किए जाते हैं। मैं सलाह देता हूं कि आप गेट में शामिल हों ताकि पूरी तरह से समझ सकें कि आपके कोड को openshift पर कैसे दबाया जाए। फिर भी मैं आपको चरणों शामिल समझाने की कोशिश करते हैं:

git clone <bitbucket-repo-url>: आप सामान्य रूप में Git के साथ क्या होता है के रूप में, दृष्टिकोण यहाँ चुनने के लिए अपने स्थानीय मशीन के लिए अपने अन्य Git रेपो क्लोन करने के लिए है (पूर्व bitbucket पर।)

आपके स्थानीय क्लोन में फिर आपका अन्य रेपो (बिटबकेट आदि) रिमोट रेपो के रूप में है। आपका रिमोट रेपो उपनाम "मूल" (आपके द्वारा क्लोन किए जाने पर गिट द्वारा उपयोग किए जाने वाले डिफ़ॉल्ट उपनाम) के साथ संग्रहीत किया जाता है। फिर आप अपने क्लोन के लिए रिमोट के रूप में openshift repo जोड़ें। आप जिसे आप जोड़ना जबकि स्पष्ट रूप से दूरस्थ रेपो के लिए एक उपनाम का उपयोग करते हैं - मैं "OpenShift" का उपयोग कर रहा उपनाम के रूप में यहाँ:

git remote add openshift -f <openshift-git-repo-url>

आदेश में करने के लिए तो अपने स्थानीय Git रेपो से कोड पुश करने के लिए सक्षम हो openshift करने के लिए आपको पहले अपने openbift repo को अपने स्थानीय बिटबकेट क्लोन के साथ मर्ज करना होगा। आपको लगता है कि स्थानीय स्तर पर जारी करके कार्य करें:

git merge openshift/master -s recursive -X ours

इस आदेश के साथ आप अपने स्थानीय Git रेपो साथ OpenShift Git रेपो में मास्टर शाखा विलय करने के लिए Git बताओ। आप इसे रिकर्सिव विलय रणनीति का उपयोग करके विलय करने के लिए कहते हैं और संघर्ष करते समय अपना ("हमारा") संस्करण चुनने के लिए कहते हैं।

एक बार विलय निष्पादित हो जाने के बाद आप अपने गिट रेपो को openshift पर धक्का देने के लिए तैयार हैं। आपको लगता है कि द्वारा कर कार्य करें:

git push openshift HEAD

आप कुछ पैराग्राफ आगे "OpenShift" (उर्फ हम पर OpenShift Git रेपो संग्रहीत कहा जाता दूरस्थ रेपो, पर सिर शाखा के लिए अपने स्थानीय कोड पुश करने के लिए Git बता)।

बीटीडब्ल्यू। मैंने एक jboss टूल ब्लॉग लिखा था जो कुछ महीने पहले openshift-java-client का उपयोग करने का तरीका दिखा रहा था: https://community.jboss.org/wiki/Enable-openshift-ciFullExampleUsingOpenshift-java-client। आप पिछले पैराग्राफ में उपर्युक्त चरणों को खोजेंगे "हम लगभग वहां हैं"।

+28

मुझे लगता है कि यह अभी भी सवाल का जवाब नहीं देता है। सवाल रिमोट के रूप में openshift के गिट रेपो का उपयोग नहीं करने के बारे में है, लेकिन इसके बजाय गिट रेपो के रूप में github (या उस मामले के लिए बिटबकेट) पर रेपो का उपयोग करना है। सहयोग करने के लिए इस्तेमाल किए गए जिथब रेपो को एक धक्का यह भी सुनिश्चित करना चाहिए कि यह openshift में दिखाई देता है। मैं भी वही ढूंढ रहा हूं लेकिन जवाब नहीं मिला है। अगर मैं –

+9

के लिए समाधान प्राप्त करता हूं तो मैं अपडेट करने का प्रयास करूंगा आप openshift git repo का उपयोग नहीं कर सकते। ओपनशफ्ट के भीतर गिट रेपो यह है कि आप अपना कोड ओपनशफ्ट कैसे करते हैं। कोई विकल्प नहीं है, इसके बजाय "इसके बजाय जिथब का उपयोग करें" नहीं है। जैसा कि मैंने उपरोक्त रूपरेखा की कोशिश की है, ओपनशफ्ट पर गिट रेपो आपको जिथब का उपयोग करने से बाहर नहीं रख रहा है। यदि आप अपने मास्टर स्रोत कंट्रोल रेपो के रूप में जिथब/बिटबकेट/एक्सएक्स का उपयोग करते हैं - और अधिकतर उपयोगकर्ता ऐसा करेंगे - तो आप ओपनशफ्ट गिट रेपो को अपने स्थानीय जिथब/बिटबकेट/एक्सएक्स-क्लोन के लिए दूरस्थ रूप से जोड़ देंगे। ओपनशफ्ट को धक्का देना तब ओपनशफ्ट को डिप्लोइंग करने के बराबर है। – adietisheim

+0

मैं गिट, केवल एसवीएन/सीवीएस से परिचित नहीं हूं, लेकिन मेरा संदेह गिट रेपो में उपयोगकर्ताओं की संख्या के बारे में है। कितने उपयोगकर्ता समर्थन समर्थन खोलते हैं? – Ricardo

0

यदि आप जावा का उपयोग कर रहे हैं तो एक वैकल्पिक दृष्टिकोण है। लेकिन इस दृष्टिकोण में भी आप ओपनशफ्ट गिट रिपोजिटरी का उपयोग करेंगे। ओपनशफ्ट द्वारा प्रदान की गई गिट रिपोजिटरी यह है कि आप अपना कोड ओपनशफ्ट कैसे देते हैं, आपके परिनियोजन योग्य:

आप कर सकते हैं - ओपनशफ्ट गिट रेपो में अपना कोड करने के बजाय - बस इसे अपनी युद्ध-फ़ाइल दें। आप ओपनशफ्ट गिट रेपो को अपनी स्थानीय मशीन पर क्लोन करते हैं। फिर आप अपने एप्लिकेशन स्रोत से एक युद्ध बनाते हैं और इस युद्ध को अपने ओपनशफ्ट गिट रेपो (क्लोन) के भीतर तैनाती फ़ोल्डर में डाल देते हैं। फिर आप अपने स्थानीय क्लोन को ओपनशफ्ट में जोड़, प्रतिबद्ध और धक्का देते हैं। एक बार जब पुश सफलतापूर्वक निष्पादित हो गया, तो जेबॉस एएस 7 आपके युद्ध को उठाएगा और इसे तैनात करेगा।

5

मैं @ adietisheim के जवाब से सहमत: आप OpenShift साथ लागू करने से पहले बेहतर Git समझने की जरूरत है =)

अब, भले ही आप Git समझते हैं, यह जरूरी नहीं कि स्पष्ट कैसे करता है, तो अपने निर्देशिका संरचना अपने मौजूदा रेपो तैनात करने के लिए है openshift द्वारा आवश्यक निर्देशिका संरचना से मेल नहीं खाता है, और यदि आप अपनी पुरानी निर्देशिका संरचना रखना चाहते हैं।

  • अलग विकल्प है कि तैनाती उन है कि विभिन्न फाइलों में नहीं हैं से निर्भर कर रहे हैं:

    कि के लिए, मैं निम्नलिखित सुझाव है। उदाहरण के लिए, मैं अलग फ़ाइलों में अन्य सेटिंग्स से मेरी डेटाबेस सेटिंग को अलग रूप में:

    • settings_deploy/OpenShift

    • settings_deploy/स्थानीय होस्ट

    और फिर कुछ के रूप में अपने स्थानीय होस्ट परीक्षण करने के लिए सिमलिंक जैसे:

    ln -s settings_deploy/localhost settings_deploy_file 
    

    एक और विकल्प है वातावरण चर का उपयोग करके होस्ट का पता लगाने:

    if 'OPENSHIFT_APP_NAME' in os.environ: 
        //openshift configurations 
    else: 
        //localhost 
    

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

    • अपने पुराने मौजूदा स्थानीय से सब कुछ hardlinks उनके सही करने के लिए:

    • एक स्थानीय तैनाती निर्देशिका

    • क्लोन में

    • प्रारंभिक OpenShift टेम्पलेट एक तैनाती स्क्रिप्ट बनाने बनाने

      हार्डलिंक बहुत कम बनाने और उपयोग करने के लिए तेज़ हैं स्मृति

      आप की तरह कुछ इस्तेमाल कर सकते हैं:

      cp -lrf original_repo_dir deploy_repo_dir

    • तैनाती रेपो में केवल सही settings_deploy फ़ाइल रखें:

      cd deploy_repo

      mv settings_deploy/openshift settings_deploy_file

      rm -r settings_deploy

    • बल धक्का:

      cd deploy_repo

      git push -f origin master

    • स्वच्छ तैनाती रेपो:

      git reset --hard HEAD

      git clean -df

Django तैनाती में रुचि रखने वालों के लिए

, मैं विशेष रूप से deploy.sh स्क्रिप्ट और परियोजना projects/elearn जो इसे तैनात की जाँच my github पर एक उदाहरण है,।

1

मैं ओपेन्सिफ्ट को एक पूर्व-मौजूदा कोड भंडार तैनात करने में समस्याओं में भाग गया। मेरे विशेष संदर्भ में, जहां मैंने टॉमकैट वेबपैप को तैनात करने की कोशिश की, ओपेन्सिफ्ट टोमकैट कॉन्फ़िगरेशन फ़ाइलें .openshift फ़ोल्डर में शामिल थीं।

मेरे लिए यह तय किया गया कि मेरे मौजूदा स्रोत पेड़ में .openshift फ़ोल्डर को शामिल करना, साथ ही साथ मेरे maven pom.xml फ़ाइल में openshift प्रोफ़ाइल को शामिल करना शामिल था।

यह वही संभावना है जो आपके ओपनिफ्ट अपस्ट्रीम एक के साथ अपने भंडार विलय करके होता है। मेरे लिए, यह adietisheim के महान उत्तर में निम्नलिखित वाक्य के पीछे "क्यों" है:

"फिर अपने स्थानीय गिट रेपो से कोड को खोलने में सक्षम होने के लिए आपको पहले अपने ओपनिफ्ट रेपो को अपने स्थानीय के साथ मर्ज करना होगा बिटबकेट क्लोन। "

मेरे मामले में, इस विलय को .openshift निर्देशिका से कॉन्फ़िगरेशन फ़ाइलों को प्राप्त करने के लिए आवश्यक था। मेरे लिए यह पता लगाने में काफी समय लगा क्योंकि बिना दबाव डालना।openshift निर्देशिका अभी भी मेरे ऐप को बनाया और सफलतापूर्वक तैनात किया। मैंने देखा एकमात्र व्यवहार लापता जेएसपी फाइलों पर एक रिपोर्ट थी, जिसने मुझे यह सोचा कि समस्या मेरी वेब.एक्सएमएल और सर्वलेट कॉन्फ़िगरेशन से संबंधित थी।

6

आप से प्रोजेक्ट फ़ोल्डर,

git remote add backup [email protected]:/path/to/git/test.git 
git push backup master 

कर आप Pushing to two git remote origins from one repository और Changing git remote origin पढ़ सकते हैं।

+0

'Git धक्का बैकअप master' पर्याप्त है, आप डॉन ' टी refspec के दोनों तरफ निर्दिष्ट करने की जरूरत है। –

+1

2 गीट रिमोट पर धक्का देने के लिए टिप सही है। आप तब भी कर सकते हैं: 'गिट पुश -यू सब' को 'सभी' को डिफ़ॉल्ट रिमोट पर। 'गिट पुश' करते समय, यह बाद में 2 repos को धक्का देगा! –

4

आप के माध्यम से

rhc create-app $APPNAME ruby-1.9 --from-code $GIT_LOCATION 

दूरस्थ Git भंडार तो OpenShift के लिए प्रारंभिक आवेदन उद्धार संपत्ति पाइप लाइन में किसी मौजूदा Git भंडार में पारित करने के लिए सक्षम होना चाहिए।

एक दूसरे संभावना के रूप में, आप के माध्यम से

rhc create-app $APPNAME ruby-1.9 --no-git 

स्थानीय OpenShift Git भंडार के निर्माण को छोड़ सकते हैं और उसके बाद चरणों में ऊपर वर्णित अपने स्थानीय Git भंडार में OpenShift दूरस्थ Git भंडार विलय करने के लिए इस्तेमाल करते हैं।

+0

अब तक का सबसे अच्छा समाधान! धन्यवाद – Sanandrea

22

मुझे पता है कि प्रश्न 2 साल पुराना है और @adietisheim's answer स्वीकार कर लिया गया है। मैं व्यक्तिगत रूप से अपने स्थानीय क्लोन में openshift repo को मर्ज करना पसंद नहीं करता क्योंकि मैं ओपनशफ्ट रेपो को अपने सार्वजनिक रेपो की मास्टर शाखा में मिश्रित नहीं करना चाहता हूं।

एक नया स्थानीय शाखा openshiftmaster शाखा के आधार पर बनाएं:

मान लिया जाये कि तुम यहाँ git remote add openshift <openshift-git-repo-url> का उपयोग कर दूरस्थ जोड़ लिया है, मुझे क्या करना होता है।

git checkout -b openshift 

आप इस तरह अपने अनुप्रयोग तैनाती विन्यास के रूप में शाखा openshift पर कुछ करता बना सकता है। फिर, वर्तमान master शाखा में सबकुछ ओवरराइट करने के लिए फ्लैग -f के साथ ओपनशफ्ट रिपोजिटरी में रिमोट रेफ मिलान करने वाले मास्टर को वर्तमान शाखा को दबाएं।

git push openshift master -f 

जब भी मैं OpenShift करने के लिए अपने एप्लिकेशन को तैनात करना चाहते हैं, मैं स्थानीय openshift शाखा की जाँच और इसके साथ master शाखा विलय होगा, तो OpenShift को धक्का बल, तथापि -f अगले धक्का के लिए आवश्यक नहीं किया जा सकता है:

git checkout openshift 
git merge --no-ff master 
git push openshift master -f 
1

आप GitHub उपयोग कर रहे हैं आप हर बार जब आप अपने GitHub भंडार में एक परिवर्तन किया तैनाती बनाया करने के लिए ट्रैविस कॉन्फ़िगर कर सकते हैं

http://docs.travis-ci.com/user/deployment/openshift/

4

Mohannd के जवाब एकदम सही है, लेकिन मैं पूर्ण समाधान योग करने के लिए, इस मामले में किसी और कुछ की जरूरत है यह चाहते हैं:

एक OpenShift रेपो के रूप में अपने GitHub रेपो उपयोग करने के लिए, वहाँ कोई सही समाधान अब है, क्योंकि, Openshfit आपके काम के आधार पर तैनाती या पुनर्निर्माण को ट्रिगर करने के लिए गिट हुक का उपयोग करता है। हालांकि, सबसे स्मार्ट तरीका कोड को एक साथ धक्का देने के लिए 2 रिपोज़ (ओपनहिफ्ट के एक और आपके गिथब के एक) का उपयोग करना होगा।

ऐसा करने के लिए: एक दूरस्थ नाम "सभी" जोड़ें और इसमें 2 पुश यूआरएल जोड़ें।

git push -u all 

प्रतिबद्ध करने और अपना कोड धक्का, के रूप में हमेशा की तरह आगे बढ़ना:: यह 2 रिमोट पर आ जाएगी और OpenShift पर तैनात

git remote add all ssh://[email protected]/~/git/yourapp.git 
git remote set-url openshift-git-repo --push --add ssh://[email protected]/~/git/yourapp.git 
git remote set-url github-repo --push --add [email protected]:youruser/yourapp.git 

फिर दूरदराज के नाम 'सब' डिफ़ॉल्ट दूरस्थ धक्का के रूप में स्थापित

git add . 
git commit -m "my commit" 
git push 

और परिणाम देखने के लिए:

[master 3fc96b2] my commit 
1 file changed, 2 deletions(-) 
MyLaptop:myapp User$ git push 
Counting objects: 3, done. 
Delta compression using up to 4 threads. 
Compressing objects: 100% (3/3), done. 
Writing objects: 100% (3/3), 291 bytes | 0 bytes/s, done. 
Total 3 (delta 2), reused 0 (delta 0) 
To [email protected]:User/myapp.git 
    a036a44..3fc96b2 master -> master 
Counting objects: 3, done. 
Delta compression using up to 4 threads. 
Compressing objects: 100% (3/3), done. 
Writing objects: 100% (3/3), 291 bytes | 0 bytes/s, done. 
Total 3 (delta 2), reused 0 (delta 0) 
remote: Stopping PHP 5.4 cartridge (Apache+mod_php) 
remote: Waiting for stop to finish 
remote: Waiting for stop to finish 
remote: Building git ref 'master', commit 3fc96b2 
remote: Preparing build for deployment 
remote: Deployment id is 9037d37a 
remote: Activating deployment 
remote: Starting PHP 5.4 cartridge (Apache+mod_php) 
remote: Application directory "/" selected as DocumentRoot 
remote: ------------------------- 
remote: Git Post-Receive Result: success 
remote: Activation status: success 
remote: Deployment completed with status: success 
To ssh://[email protected]/~/git/myapp.git/ 
    a036a44..3fc96b2 master -> master 
MyLaptop:myapp User$ 

उम्मीद है कि यह

+0

आपको एक त्रुटि है। आपके पास एकाधिक भंडार हो सकते हैं, लेकिन इन दोनों को "मूल" नाम नहीं दिया जा सकता है। वे अद्वितीय होना चाहिए, जैसे: ** मूल ** और ** मूल 2 ** –

+0

धन्यवाद एरिक पी, मैंने इस कार्यान्वयन का उपयोग करते हुए टाइपो –

+0

तय किया लेकिन मुझे एक त्रुटि मिली जो कहती है कि ऐसा कोई रिमोट 'openshift-git-repo' नहीं है .. मुझे लगता है कि ऊपर लिपि पर एक गायब है .. –

1

आपकी इच्छाओं को करने का एक तरीका है, यानी ओपेन्सिफ्ट के रेपो को छोड़ दें। आपको जो करना है वह एक जेनकींस स्थापित करना है, और इसे अपने स्वयं के भंडार का चुनाव करना है।

वहाँ एक लिंक यहां बताते हैं कि खरोंच से इसे सेट अप करने का तरीका देखें: http://blog.anthavio.net/2014/01/deploy-to-openshift-from-github.html

0

ले आसान!

चरण 1: ऐप बनाएं। अपनी पसंदीदा विधि के साथ (गिट रिपोजिटरी से, प्री-मेकर ओपेन्सिफ्ट, इत्यादि)। rhc git-clone nameApp
चरण 3: rhc app-configure nameApp --auto-deploy
चरण 4: आप कंसोल metod
चरण 2 का उपयोग करता है, तो आनंद लें!

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

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