क्या मैं अपने मौजूदा git रेपो का उपयोग ओपनशिफ्ट के साथ कर सकता हूं?


102

क्या केवल ओपनशिफ्ट पर गिट रेपो होना आवश्यक है? मेरे पास पहले से ही बिटकॉइन / जीथबिट गिट रेपो है और वह केवल वहीं धकेलना पसंद करेगा। क्या मैं बस इसमें हुक लगा सकता हूं ताकि ओपनशिफ्ट को इंटिमेशन मिले?

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

मैं जाँच किया था इस लेकिन यह मुझे उलझन में: यह बाहर निकलने के लिए और नए (OpenShift) Git विलय के बारे में बात कर रहा है?


6
क्या आप इस प्रश्न का प्रमाण दे सकते हैं? यह समझना बहुत कठिन है।
मैट फेनविक

जवाबों:


226

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

git clone <bitbucket-repo-url>

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

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

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

git merge openshift/master -s recursive -X ours

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

एक बार जब मर्ज निष्पादित हो जाता है तो आप अपने गिट रेपो को ओपनशिफ्ट में धकेलने के लिए तैयार हैं। आप ऐसा करके देखें:

git push openshift HEAD

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

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


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

9
आप Openhift git रेपो का उपयोग नहीं कर सकते। OpenShift के भीतर git रेपो है कि आप अपने कोड को OpenShift कैसे सौंपते हैं। कोई विकल्प नहीं है, कोई "github का उपयोग करें" नहीं है। जैसा कि मैंने ऊपर उल्लिखित करने की कोशिश की, OpenShift पर git रेपो आपको github का उपयोग करने से बाहर नहीं कर रहा है। यदि आप अपने मास्टर स्रोत नियंत्रण रेपो के रूप में जीथब / बिटबकेट / एक्सएक्सएक्स का उपयोग करते हैं - और अधिकांश उपयोगकर्ता ऐसा करेंगे - तो आप बस अपने स्थानीय जीथब / बिटबकेट / एक्सएक्स-क्लोन के लिए रिमोट के रूप में ओपनशिफ्ट गिट रेपो जोड़ देंगे। OpenShift के लिए पुश करना OpenShift के चित्रण के बराबर है।
विशेषण

1
अगर मैं इसे समझता हूं, अगर मैं ओपनशिफ्ट के साथ काम करता हूं तो मुझे एक विकास रेपो (उदाहरण के लिए जीथूब) के साथ काम करना चाहिए और अगर मैं इसे ओपनहेड हेड, रिहैट पर बस पुश करना चाहता हूं?
रिकार्डो

1
वर-ध्वज को ध्यान में रखते हुए, और git URL का ssh भाग दोनों आवश्यक हैं
साइमन H

1
नए git 2.9 के साथ @adietisheim आपको जोड़ने की आवश्यकता होगी --allow-unrelated-historiesक्योंकि git डिफ़ॉल्ट को असंबंधित इतिहासों को विलय करने की अनुमति नहीं देने के लिए बदल दिया गया है।
एलोन बर्ग

23

मुझे पता है कि प्रश्न 2 साल पुराना है और @ एडिटिसहेम के उत्तर को स्वीकार कर लिया गया है। मैं व्यक्तिगत रूप से ओपनशीफ्ट रेपो को अपने स्थानीय क्लोन में मिलाना पसंद नहीं करता क्योंकि मैं अपने पब्लिक रेपो के मास्टर शाखा में ओपनशिफ्ट रेपो को मिलाना नहीं चाहता।

यह मानते हुए कि आपने रिमोट का उपयोग करके जोड़ा है git remote add openshift <openshift-git-repo-url>, यहाँ मैं क्या करूँगा:

शाखा के openshiftआधार पर एक नई स्थानीय शाखा बनाएँ master

git checkout -b openshift

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

git push openshift master -f

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

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

6

आप परियोजना फ़ोल्डर से, करते हैं

git remote add backup user@server:/path/to/git/test.git
git push backup master

आप एक रिपॉजिटरी से दो git रिमोट ओरिजिन में Pushing पढ़ सकते हैं और git रिमोट ओरिजिन बदल सकते हैं


git push backup masterपर्याप्त है, आपको refspec के दोनों किनारों को निर्दिष्ट करने की आवश्यकता नहीं है।

1
2 git रिमोट पर पुश करने का टिप एकदम सही है। फिर आप git push -u allडिफ़ॉल्ट रिमोट पर a: 'all' भी कर सकते हैं । करते समय git push, यह बाद में 2 रिपोज को धक्का देगा!
अकरम बेन आइसी

5

मैं @ adietisheim के उत्तर से सहमत हूं: आपको ओपनशफ्ट = के साथ तैनाती से पहले बेहतर git को समझना होगा)

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

उसके लिए, मेरे पास निम्नलिखित टिप्स हैं:

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

    • 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पर्यावरण चर प्रदान किया है (इस एक के लिए असंभावित) विधि टूट जाती है। वैसे भी, आपको अभी भी स्पष्ट रूप से अलग करना होगा कि तैनाती पर निर्भर क्या है और क्या नहीं है।

  • एक स्थानीय परिनियोजन निर्देशिका बनाएँ

  • इसमें प्रारंभिक ओपनशिफ्ट टेम्पलेट को क्लोन करें

  • एक तैनाती स्क्रिप्ट बनाएं जो:

    • आपके पुराने मौजूदा स्थानीय से लेकर उनके सही स्थानों तक सभी को हार्डलिंक करता है

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

      आप कुछ का उपयोग कर सकते हैं:

      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करता है जिसे वह तैनात करता है।


4

आपको एक मौजूदा गिट रिपॉजिटरी में परिसंपत्ति पाइपलाइन के माध्यम से पारित करने में सक्षम होना चाहिए

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

दूरस्थ Git रिपॉजिटरी तब OpenShift के लिए प्रारंभिक अनुप्रयोग देता है।

दूसरी संभावना के रूप में, आप के माध्यम से स्थानीय OpenSHift Git रिपॉजिटरी के निर्माण को छोड़ सकते हैं

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

और फिर ऊपर वर्णित चरणों का उपयोग करके OpenShift के रिमोट Git रिपॉजिटरी को अपने स्थानीय Git रिपॉजिटरी में मर्ज करें।


4

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

Openshift repo के रूप में अपने github रेपो का उपयोग करने के लिए, अब कोई सही समाधान नहीं है, क्योंकि, Openshfit आपके कमिट के आधार पर परिनियोजन या पुन: तैनाती को गति प्रदान करने के लिए git हुक का उपयोग करता है। हालाँकि, सबसे चतुर तरीका यह होगा कि कोड को एक साथ धकेलने के लिए 2 रिपोस (ओपनशफ्ट के एक और आपके गीथूब के एक) का उपयोग किया जाए।

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

git remote add all ssh://23456781234567@yourapp-namespace.rhcloud.com/~/git/yourapp.git
git remote set-url openshift-git-repo --push --add ssh://23456781234567@yourapp-namespace.rhcloud.com/~/git/yourapp.git
git remote set-url github-repo --push --add git@github.com:youruser/yourapp.git

फिर 'पुश' नाम के रिमोट को डिफ़ॉल्ट पुश रिमोट के रूप में सेट करें:

git push -u all

अपने कोड को कमिट करने और पुश करने के लिए, हमेशा की तरह आगे बढ़ें: यह 2 रीमोट पर पुश करेगा और ओपनशिफ्ट पर तैनात होगा

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 git@github.com: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://23456789@myapp-namespace.rhcloud.com/~/git/myapp.git/
   a036a44..3fc96b2  master -> master
MyLaptop:myapp User$

उम्मीद है की यह मदद करेगा


आपके पास एक त्रुटि है। आपके पास कई रिपॉजिटरी हो सकते हैं, लेकिन उन दोनों को "मूल" नाम नहीं दिया जा सकता है। उन्हें अद्वितीय होना चाहिए, जैसे: मूल और मूल 2
एरिक पी।

इस कार्यान्वयन का उपयोग करते हुए, लेकिन मुझे एक त्रुटि मिली जो कहती है कि ऐसा कोई दूरस्थ 'ओपनशिफ्ट-गिट-रेपो' नहीं है .. मुझे लगता है कि ऊपर की स्क्रिप्ट पर एक लापता है ..
अरमान ओटेगा

2

ऐसा करने का एक तरीका है कि आप क्या चाहते हैं, यानी Openshift के रेपो को छोड़ दें। आपको जो करने की ज़रूरत है वह एक जेनकींस स्थापित करने के लिए है, और यह आपके स्वयं के भंडार को प्रदूषित करता है।

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


1

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

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

यह अत्यधिक संभावना है कि नए रिपॉजिटरी अपस्ट्रीम के साथ अपनी रिपॉजिटरी को मर्ज करके ऐसा ही होगा। मेरे लिए, यह "क्यों" है एडिटिसहेम के महान जवाब में निम्नलिखित वाक्य के पीछे:

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

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


1

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

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


0

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

आप अपने कोड को OpenShift git रेपो में करने के बजाय कर सकते हैं - बस इसे अपनी युद्ध-फ़ाइल दें। आप अपने स्थानीय मशीन में OpenShift git रेपो क्लोन करते हैं। फिर आप अपने एप्लिकेशन स्रोत से एक युद्ध का निर्माण करते हैं और इस युद्ध को अपने OpenSift git repo (क्लोन) के भीतर तैनाती फ़ोल्डर में डालते हैं। फिर आप OpenShift में अपने स्थानीय क्लोन को जोड़ते हैं, प्रतिबद्ध करते हैं और धक्का देते हैं। एक बार जब पुश सफलतापूर्वक निष्पादित हो जाता है, तो JBoss AS7 आपके युद्ध को चुन लेगा और उसे तैनात कर देगा।


0

शांतिसे काम लो!

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


यह ठीक है, लेकिन यह सवाल का जवाब नहीं था :)
Janos Vinceller
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.