2015-09-17 4 views
5

मेरे पास जेनकिन्स वर्क का उपयोग कर मास्टर/स्लेव कॉन्फ़िगरेशन में 2 RHEL मशीन सेटअप हैं। 1.60 9.2स्लेव SetupPlugin का उपयोग कर दास के पथ में कैसे जोड़ें?

दास एसएसएच गुलाम प्लगइन 1.10 के माध्यम से लॉन्च किया जा रहा है।

मैं अपने दास मशीन को चलाने के लिए आवश्यक टूल इंस्टॉल करने के लिए Slave Setup Plugin v 1.9 का उपयोग करने का प्रयास कर रहा हूं। विशेष रूप से मैं sqlplus स्थापित कर रहा हूँ।

if command -v sqlplus >/dev/null; then 
    echo "sqlplus already setup. Nothing to do." 
else 
    #Create directory for sqlplus and unzip it there. 
    mkdir /jenkins/tools/sqlplus 
    tar -xvf sqlplussetup/instantclient-basiclite-linux.x64-12.1.0.2.0.tar.gz -C /jenkins/tools/sqlplus || { echo 'unzip failed' ; exit 1; } 
    tar -xvf sqlplussetup/instantclient-sqlplus-linux.x64-12.1.0.2.0.tar.gz -C /jenkins/tools/sqlplus || { echo 'unzip failed' ; exit 1; } 

    cd /jenkins/tools/sqlplus/instantclient_12_1 

    #Create links for the Oracle libs 
    ln -s libclntsh.so.12.1 libclntsh.so || { echo 'Could not create link' ; exit 1; } 
    ln -s libocci.so.12.1 libocci.so || { echo 'Could not create link' ; exit 1; } 

    #Add two lines to .bashrc only if they don't already exist. Export LD_LIBRARY_PATH and add sqlplus to PATH. 
    grep -q -F 'export LD_LIBRARY_PATH=/jenkins/tools/sqlplus/instantclient_12_1:$LD_LIBRARY_PATH' /home/jenkins/.bashrc || echo 'export LD_LIBRARY_PATH=/jenkins/tools/sqlplus/instantclient_12_1:$LD_LIBRARY_PATH' >> /home/jenkins/.bashrc 
    grep -q -F 'export PATH=$PATH:/jenkins/tools/sqlplus/instantclient_12_1' /home/jenkins/.bashrc || echo 'export PATH=$PATH:/jenkins/tools/sqlplus/instantclient_12_1' >> /home/jenkins/.bashrc 

    #Export variables so they can be used right away 
    export LD_LIBRARY_PATH=/jenkins/tools/sqlplus/instantclient_12_1:$LD_LIBRARY_PATH 
    export PATH=$PATH:/jenkins/tools/sqlplus/instantclient_12_1 

    echo "sqlplus has been setup." 
fi 

यह स्क्रिप्ट सफलतापूर्वक चलता है और सब कुछ काम करने के लिए प्रकट होता है जब तक मैं एक निर्माण चलाने के लिए और sqlplus आदेश पर अमल करने का प्रयास करें:

यहाँ स्क्रिप्ट है कि मैं क्रम में चला रहा हूँ स्थापित करने sqlplus कोशिश करने के लिए है। बिल्ड विफल रहता है क्योंकि sqlplus एक मान्यता प्राप्त कमांड नहीं है।

मेरा मुख्य प्रश्न यह है: दास लॉन्च करते समय स्वचालित रूप से पर्यावरण चर जोड़ने का उचित तरीका क्या है?

कृपया ध्यान दें कि मैं स्वचालित ऐसा करने का तरीका ढूंढ रहा हूं। मैं अपने दास के लिए कॉन्फ़िगरेशन स्क्रीन में नहीं जाना चाहता, चेकबॉक्स पर टिकटें और एक पर्यावरण चर निर्दिष्ट करें। यह उन चीज़ों के प्रति प्रतिकूल है जो मैं प्राप्त करने की कोशिश कर रहा हूं जो एक दास है जो एक बार जुड़े हुए निर्माण के लिए तत्काल प्रयोग योग्य है।


मुझे बहुत समझ में आता है कि मेरी स्क्रिप्ट क्यों काम नहीं करती है। जब जेनकींस गुलाम लॉन्च कर रहा है यह पहली बार एक SSH कनेक्शन बनाता है और फिर इसे आदेश

/bin/sh -xe /jenkins/tmp/hudson8035138410767957141.sh 

कहाँ hudson8035138410767957141.sh की सामग्री को ऊपर से मेरी स्क्रिप्ट है का उपयोग करते हुए अपना सेटअप स्क्रिप्ट चलाता है। तो जाहिर है, exportisn't going to work। मैं उम्मीद कर रहा था कि निर्यात को .bashrc फ़ाइल में जोड़ना इस पर होगा लेकिन यह काम नहीं करता है। मैं सोचता हूं ऐसा इसलिए है क्योंकि एसएसएच कनेक्शन स्थापित होने के बाद यह स्क्रिप्ट निष्पादित की जाती है और इसलिए .bashrc पहले ही पढ़ा जा चुका है।

समस्या यह है कि मैं इस सीमा के आसपास काम करने के किसी भी तरीके से नहीं समझ सकता।

+0

हम वास्तविक नौकरियां चलाने से पहले चर सेट अप करने के लिए https://wiki.jenkins-ci.org/display/JENKINS/EnvInject+Plugin का उपयोग करते हैं। यदि आप प्रतिष्ठानों के बारे में कुछ सम्मेलनों का पालन करते हैं, तो इससे मदद मिल सकती है। – Jayan

उत्तर

1

बैश अपने स्टार्टअप फ़ाइलें (.bashrc, .profile आदि) गैर interative गोले के लिए कि --login विकल्प स्पष्ट रूप से सेट की जरूरत नहीं है के किसी भी पढ़ा नहीं है - यही कारण है कि निर्यात से काम नहीं करते है।

तो, समाधान 'ए' पर पर bashrc जादू आप ऊपर का सुझाव है कि रखने के लिए, और

#!/bin/bash --login 

<your script here> 

को अपने निर्माण चरण में पहली पंक्ति बदलकर --login विकल्प जोड़ने के लिए स्पष्ट मामला है पहली पंक्ति डिफ़ॉल्ट डीबग आउटपुट को भी रोक देगा जो आपको डिफ़ॉल्ट के -x विकल्प से प्राप्त होती है (ऊपर अपना कंसोल स्निपेट देखें)।

वैकल्पिक समाधान "बी" इस तथ्य का उपयोग करता है कि बैश किसी भी स्क्रिप्ट का स्रोत करेगा जिसका नाम $BASH_ENV में दिया गया है (यदि वह चर परिभाषित किया गया है और फ़ाइल मौजूद है)। अपने दास गुणों में वैश्विक रूप से उस चर को परिभाषित करें (उदा।, /jenkins/tools/setup.sh पर सेट करें) और दास सेटअप के दौरान आवश्यक निर्यात जोड़ें। प्रत्येक बैश खोल निर्माण चरण तब सेटिंग्स को पढ़ेगा।

समाधान "बी" के साथ आपको --login विकल्प का उपयोग करने की आवश्यकता नहीं है और आपको .bashrc को गड़बड़ करने की आवश्यकता नहीं है। हालांकि, "BASH_ENV" सुविधा केवल तब सक्रिय होती है जब "बैश मोड" में बैश चलता है। चूंकि जेनकींस sh के माध्यम से खोल शुरू करते हैं, तो बैश ऐतिहासिक sh का अनुकरण करने की कोशिश करता है, जिसमें उस सुविधा नहीं है। तो, भी बी के लिए, आप एक कुटिया की जरूरत है:

#!/bin/bash 

<your script here> 

लेकिन अनुरेखण उत्पादन उत्पादन व्यवस्था में आम तौर पर बहुत ज्यादा नहीं है कि से छुटकारा पाने के लिए है कि आप वैसे भी आवश्यकता होगी।

+0

मुझे आपका समाधान "बी" पसंद है। अगर मैं सही ढंग से समझता हूं, अगर मैं '$ BASH_ENV' स्क्रिप्ट के अंदर' पथ 'और 'LD_LIBRARY_PATH' निर्यात करना था, तो वे पूरे निर्माण चरण में बने रहेंगे? दुर्भाग्यवश, मैं इस परियोजना पर काम नहीं कर रहा हूं जिसके लिए इसकी आवश्यकता है इसलिए मैं वास्तव में इसका परीक्षण नहीं कर सकता। – FGreg

+0

हां। '$ BASH_ENV' में कमांड/निर्यात बैश स्टार्टअप के दौरान पढ़े जाते हैं और पूरे शेल सत्र के लिए बने रहते हैं - वास्तव में वही वही है जो आप इंटरैक्टिव लॉगिन शैल के लिए' .bashrc' आदि में जोड़ते हैं। –

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