2012-04-18 18 views
17

मैं जेनकींस सीआई के लिए नया हूं। मैं अपने रिमोट जेनकींस में आरवीएम स्थापित कर रहा हूं और जब मैं खोल के नीचे निष्पादित करता हूं।आरवीएम और जेनकींस सेटअप

#!/bin/bash -x 
source ~/.bashrc 
rvm use [email protected] 

मुझे निम्न त्रुटियां मिलती हैं।

+ source /var/lib/jenkins/.bashrc 
++ PATH=/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games:/var/lib/jenkins/.rvm/bin:/var/lib/jenkins/.rvm/bin 
+ rvm use [email protected] 

RVM is not a function, selecting rubies with 'rvm use ...' will not work. 
You need to change your terminal settings to allow shell login. 
Please visit https://rvm.io/workflow/screen/ for example. 

इसका क्या अर्थ है? मुझे कोई विचार नहीं है। क्रिप्या मेरि सहायता करे।

UPDATED: मैं स्क्रिप्ट नीचे की कोशिश की कर रहा हूँ लेकिन मैं अभी भी त्रुटियों मिलती है:

#!/bin/bash -x 
source /home/zeck/.bashrc 
[[ -s ".rvmrc" ]] && source .rvmrc 
export RAILS_ENV=test 
bundle install 

त्रुटियाँ:

/tmp/hudson457106939700368111.sh: line 5: bundle: command not found 
Build step 'Execute shell' marked build as failure 
Finished: FAILURE 

खोल जेनकींस निर्माण RVM, gemsets और जवाहरात का पता नहीं लगा सकते हैं। मुझे क्या करना चाहिए?

अद्यतन 2: इसलिए जेनकिंस रूबी का पता नहीं लगा सकता है।

+ ruby -v 
/tmp/hudson2505951775163045158.sh: line 5: ruby: command not found 
Build step 'Execute shell' marked build as failure 
Finished: FAILUR 

मैं किसी भी जेनकींस प्लगइन का उपयोग नहीं कर रहा हूं और मैं सिर्फ बिल्ड-> खोल अनुभाग को निष्पादित करता हूं।

+0

जेक, मैं भी इस मुद्दे को हल करने में पागल हो रहा हूं, आपने इसे कैसे ठीक किया ??? – Farooq

उत्तर

11

कोशिश:

. $(/home/RVM_USER/.rvm/bin/rvm env [email protected] --path) 

सुनिश्चित करें कि आप स्थिर RVM चलाने बनाने:

rvm get stable 

नोट: अंतिम जेनकींस संस्करण हमेशा "स्रोत" स्वीकार नहीं करता है, लेकिन "।"। RVM_USER वह उपयोगकर्ता है जिसने RVM स्थापित किया है। वैकल्पिक रूप से आप मुख्य पथ में RVM कमांड भी निर्यात कर सकते हैं।

+0

मदद करने के लिए बहुत पहले धन्यवाद। लेकिन मुझे 'आरवीएम: कमांड नहीं मिला'। कृपया मेरे अपडेट – Zeck

+0

देखें क्योंकि यह एक आरवीएम इंस्टॉलेशन के लिए अलग-अलग उपयोगकर्ताओं का उपयोग करता है, सुनिश्चित करें कि दूसरा उपयोगकर्ता 'ज़ेक' उसी आरवीएम का उपयोग करता है - '/ home/zeck/.bashrc' में जोड़ें:' निर्यात PATH = $ PATH:/var/lib/jenkins/.rvm/bin' – mpapis

27

त्रुटि संदेश के अनुसार, आरवीएम एक लॉगिन खोल की अपेक्षा करता है। हैशबैंग लाइन को #!/bin/bash -xl में बदलना इसे हल करना चाहिए।

+5

वैसे, sourcing .rvmrc टर्मिनल पर बहुत कुछ प्रिंट कर सकता है। आप इसके बजाय '#!/Bin/bash -l' का उपयोग करना चाह सकते हैं, फिर srcing .rvmrc के बाद 'set -x' करें। – disrupt

+0

किसी भी स्पष्टीकरण के लिए -l और -x क्या उपयोग कर रहे हैं? –

+0

-l विकल्प आपको एक लॉगिन खोल देता है, और -x डीबग मोड में बैश शुरू करता है। मैं सिर्फ -l का उपयोग करने में सक्षम था ताकि जेनकिंस आउटपुट वर्बोज़ के रूप में नहीं था। – bruz

9

हां, जाहिर है आप में $HOME/.rvm/bin याद करते हैं। मैं मैक ओएस एक्स पर हडसन से सफलतापूर्वक आरवीएम का उपयोग कर रहा हूं। नोटिस करने वाली पहली बात यह है कि, जब तक आप BASH_ENV पर्यावरण चर (ENV sh के लिए) को परिभाषित नहीं करते हैं, .bashrc को केवल इंटरैक्टिव गैर-लॉगिन खोल के साथ ही स्वचालित रूप से कॉल किया जाता है। इस तरह की एक खोल शुरू कर दिया है जब आप करते हैं - उदाहरण के लिए - कमांड लाइन से निम्नलिखित:

$ /bin/bash 

जब आप अपनी स्क्रिप्ट में #!/bin/bash उपयोग करते हैं, .bashrc बुलाया नहीं किया जाएगा।

हडसन के साथ rvm काम करने के लिए, मैं अपने .bash_profile में निम्नलिखित है:

PATH=$PATH:$HOME/.rvm/bin # Add RVM to PATH for scripting 
export PATH 

[[ -s "$HOME/.rvm/scripts/rvm" ]] && source "$HOME/.rvm/scripts/rvm" 

[[ -s "$HOME/.rvm/scripts/rvm" ]] && source "$HOME/.rvm/scripts/rvm" के लिए धन्यवाद मैं rvm हर बार जब मैं नई टर्मिनल विंडो (इंटरैक्टिव, लॉगिन शेल) शुरू सक्षम है।

मैं अपने .bashrc में कुछ भी नहीं डालता, खासकर मैं वहां आरवीएम स्क्रिप्ट्स को सोर्स नहीं कर रहा हूं। इसके साथ कुछ भी गलत नहीं है, लेकिन यदि कोई अन्य स्क्रिप्ट कुछ निर्यात बेवकूफ बनाती है जैसे 'निर्यात BASH_ENV = $ HOME /।bashrc 'और फिर गैर-इंटरैक्टिव खोल का आह्वान करते हैं, आप देखते हैं कि क्या हो सकता है - यह वास्तव में भूलना आसान है।

इसलिए, चीजों को अपने .bashrc में लोड करने के बजाय, अपनी स्क्रिप्ट को किसी भी शेल स्टार्टअप फ़ाइल से स्वतंत्र रखना बेहतर है और सुनिश्चित करें कि सही वातावरण स्क्रिप्ट के भीतर स्थापित है। मैं अभी भी अपने .bash_profile में $HOME/.rvm/bin रखने के लिए, लेकिन फिर मैं मेरी स्क्रिप्ट की शुरुआत में निम्नलिखित शामिल हैं:

#!/bin/bash 

[[ -s "$HOME/.rvm/scripts/rvm" ]] && source "$HOME/.rvm/scripts/rvm" 

rvm use [email protected] 

set -ex 
cucumber # just an example 

सूचना -e विकल्प जो त्रुटि कोड के साथ बाहर निकलने के लिए स्क्रिप्ट बलों किसी भी आदेश के बाद अगर set -ex विफल रहता है। हडसन के साथ स्क्रिप्ट का उपयोग करते समय यह व्यवहार हो सकता है। यह कहना गलत है कि आरवीएम एक लॉगिन खोल की अपेक्षा करता है। यद्यपि आपकी स्क्रिप्ट में #!/bin/bash -l का उपयोग करने पर काम करेगा, यह सबसे अच्छा तरीका प्रतीत नहीं होता है।

+0

हां, इससे मदद मिली। आरवीएम का स्थान भिन्न हो सकता है, मेरे मामले में यह '[[-s"/usr/local/rvm/scripts/rvm "]] & स्रोत"/usr/local/rvm/scripts/rvm "था जो काम करता था, साथ में 'rvm उपयोग ruby_name @ gemset_name' – 0x4a6f4672

1

मेरे लिए जेनकींस में निर्माण आदेशों इस तय करने के लिए एक मामला जोड़ने

#!/usr/bin/env bash 

    rvm use 2.0.0 
    bundle install 
    rake test 
    ... 
+0

आप महोदय, मेरा दिन बनाया :) – ncuesta

3

बस अपने खोल स्क्रिप्ट में इस कोड को जोड़ने के लिए, मुझे लगता है कि rvm अपने स्रोत से लोड कर रहा है तो यह किसी और काम करना चाहिए पथ निर्यात करने के लिए की जरूरत है परिवर्तनीय

#!/bin/bash -l 
source ~/.bashrc 
rvm use [email protected] 

एल लॉगिन शेल्फ के लिए है, यदि आप एक्स शामिल करते हैं तो यह भी डिबगिंग के लिए होगा।

0

जेनकिंस नोड्स पथ को उसी तरह लोड नहीं करते हैं, इसलिए यह आरबीएम के रूबी के संस्करण को खोजने के लिए उचित पथ का उपयोग नहीं कर रहा है। आप किसी दिए गए एजेंट के लिए पथ निर्धारित कर सकते हैं।

  1. echo $PATH
  2. कर मान लिया जाये कि आप ठीक ढंग से rvm को सेट कर लेने के द्वारा अपने वर्तमान पथ का पता लगाएं, जहां गहरे लाल रंग का का rvm के संस्करण which ruby
  3. चलाकर स्थित है लगता है आपके एजेंट के विन्यास में एक सेटिंग है जहां पर्यावरण चर सेट कर सकते हैं। पाथ को 1 और 2 समेकित करने के लिए सेट करें।

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

  • कोई संबंधित समस्या नहीं^_^