जेनकिंस / हडसन पर्यावरण चर


101

मुझे प्रयोक्ता की ओर जेनकींस चला रहा हूँ jenkinsthats है $PATHकुछ करने के लिए सेट और जब मैं जेनकींस वेब अंतरफलक में जाते हैं, में सिस्टम गुण विंडो ( http://$host/systemInfo) मैं एक अलग देखना $PATH

मैंने जेनकिन्स वेबसाइट से देशी आरपीएम के साथ सेन्टोस पर जेनकिन्स स्थापित किया है। मैं स्थापना के साथ उपलब्ध कराई गई स्टार्टअप स्क्रिप्ट का उपयोग कर रहा हूंsudo /etc/init.d/jenkins start

क्या कोई मुझे समझा सकता है कि ऐसा क्यों होता है?


1
यदि आप जेनकिंस के रूप में लॉगिन करते हैं, और echo $PATH, क्या यह आपको जेन्किन्स में दिखाई देता है?
अपग्रेडेडेव

3
@ नहीं, यह मेल नहीं खाता। समझ में नहीं आता क्यों
माइकल

8
यह मेल नहीं खाता इसका कारण यह है कि जब आप जेनकिंस उपयोगकर्ता के रूप में लॉगिन करते हैं, तो आप लॉगिन शेल खोल रहे होते हैं, जबकि जेनकिन्स सिर्फ / बिन / श -xe {आपकी स्क्रिप्ट} निष्पादित करता है, इसलिए यह स्क्रिप्ट के समान सेट से नहीं चलता है जो पाथ पर्यावरण चर को बदल देता है। वास्तव में, स्क्रिप्ट का सेट * निक्स और / या शेल के विशेष स्वाद के अनुसार भिन्न होता है जो आपने स्थापित किया है। मैंने JWSkins के साथ AWS Linux AMI पर परीक्षण किया है और दुख की बात है कि / etc / profile /etc/profile.d/xxx.sh / etc / bashrc / etc / environment ~ / .bash_profile ~ / .profile / /। Bashrc में से कोई भी सक्षम नहीं था। PATH को प्रभावित करने के लिए / बिन / श
ल्यूक

जवाबों:


141

माइकल,

दो चीज़ें:

जब जेनकिन्स एक कंप्यूटर से जुड़ता है, तो वह shशेल में जाता है , न कि bashशेल (कम से कम यह जो मैंने देखा है - मैं गलत हो सकता हूं)। तो आपके bashrc फ़ाइल में $ PATH में किए गए किसी भी परिवर्तन पर विचार नहीं किया जाता है।

इसके अलावा, आप अपने स्थानीय शेल में $ PATH में जो भी बदलाव करते हैं (वह जिसे आप व्यक्तिगत रूप से ssh करते हैं) जेनकिंस में नहीं दिखाएंगे।

जेनकिंस का उपयोग करने वाले पथ को बदलने के लिए, आपके पास दो विकल्प हैं (AFAIK):

1) अपनी /etc/profileफ़ाइल को संपादित करें और वहां जो रास्ते चाहते हैं उसे जोड़ें

2) अपने दास के कॉन्फ़िगरेशन पृष्ठ पर जाएं, और PATHमूल्य के साथ पर्यावरण चर जोड़ें :$PATH:/followed-by/paths/you/want/to/add

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


2
इस जवाब ने मेरे लिए काम किया, लेकिन मैंने देखा कि जेनकिन्स कॉन्फ़िगरेशन पृष्ठ में जो कुछ भी लिखते हैं, उसके बारे में बहुत संवेदनशील है। मैं इसे रिक्त स्थान के साथ पथ के साथ काम करने के लिए नहीं मिला।
मिगेलसेंटिरसो

हां यह है, लेकिन जब आप UNIX शेल में रिक्त स्थान के साथ पथ दर्ज करते हैं, तो आमतौर पर अंतरिक्ष को `` वर्ण के साथ छोड़ दिया जाता है। इसलिए, यदि आपका रास्ता "/ opt / bin / My Folder Name" है, तो आप इसके बजाय "/ opt / bin / My \ Folder \ Name" आज़माना चाह सकते हैं। यह रिक्त स्थान से बच जाएगा और आपको उनका उपयोग करने की अनुमति देगा।
सागर

11
समाधान 2 जाने का रास्ता है।
गागरिन

2
अनुवर्ती: मेरे उबंटू प्रणाली पर, जेनकिंस सेवा एक अपस्टार्ट काम है, इसलिए मैं पुराने सिसविनीट स्टब स्क्रिप्ट को संशोधित कर रहा था। गलत जगह। जब मैं /etc/init/jenkins.conf स्क्रिप्ट को ट्वीक करता हूं, और PATH को अपडेट करता है, तो उसे java निष्पादित करने से पहले काम करता है।
१०:४० पर स्टैब्लॉग

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

36

मैं इस समस्या में भागता रहा, लेकिन अब मैं इसे जोड़ता हूं:

source /etc/profile

मेरी निर्माण प्रक्रिया में पहले कदम के रूप में। अब मेरे सभी बाद के नियम जेनकिंस को सुचारू रूप से संचालित करने के लिए लोड किए गए हैं।


6
है ना? विस्तार से, कृपया ... आप कहां जोड़ें? कैसे? कब? क्या यह विंडोज पर काम करता है?
HX_unbanned

मुझे लगता है कि आप अपने निर्माण के हिस्से के रूप में एक शेल कमांड चला रहे हैं। source /etc/profileउस बिल्ड में पहली कमांड के रूप में रखो > शेल खोलना> कमांड टेक्स्टारिया।
bryan kennedy

2
यह मैक पर काम करता है, मुझे यह भी पता चला कि जैसे रास्ते /usr/local/binनिर्दिष्ट हैं /etc/paths, और /etc/pathsइसका उपयोग किया जाता है /usr/libexec/path_helper, और path_helper को निष्पादित किया जाता है /etc/profile
Hiroshi

1
आपने मेरा दिन बचा लिया :)
रमेशवेल

सोर्सिंग / आदि / प्रोफाइल नौकरी में 'इको $ पाथ' के डिबग को जोड़ते समय रास्ता दिखाते हैं, लेकिन अगर मैं नौकरी के लिए पर्यावरण चर को देखता हूं तो यह समान नहीं है।
एलिजा लिन

23

आप /etc/sysconfig/jenkinsपर्यावरण चर आदि में कोई परिवर्तन करने के लिए फ़ाइल को संपादित कर सकते हैं , आदि। मैंने बस source /etc/profileफ़ाइल के अंत में जोड़ा । /etc/profileसभी उचित PATHचर सेटअप के सभी है। जब आप ऐसा करते हैं, तो सुनिश्चित करें कि आप जेनकिंस को पुनरारंभ करें

/etc/init.d/jenkins restart

हम ZendServer CE चला रहे हैं जो नाशपाती, फिंग आदि को एक अलग पथ में स्थापित करता है इसलिए यह सहायक था। इसके अलावा, हम उन LD_LIBRARY_PATHत्रुटियों को नहीं पाते हैं जो हम Oracle ग्राहक और जेनकिंस के साथ प्राप्त करते थे।


यह एक मुख्य टिप्पणी है, या {jenkins-url} / पुनरारंभ या {jenkins-url} / safeRestart से जेनकींस को पुनः आरंभ करें। मैं अपना सिर पीट रहा था कि पथ परिवर्तन क्यों नहीं उठाया गया, ubuntu होस्ट पर भी / आदि / वातावरण को संपादित करके - RESTART इसे ठीक कर देगा, जैसा कि {jenkins-url} /
systemInfo

सभी अन्य विफल रहे, यह केवल एक ही है जो काम करता है! काश यह अधिक प्रचलित होता तो मैं पिछले कुछ घंटों को बर्बाद नहीं करता!
ब्रैड बोनकोस्की

15

मैंने कोशिश की /etc/profile, ~/.profileऔर ~/.bash_profileउनमें से कोई भी काम नहीं किया। मैंने पाया कि ~/.bashrcजेनकिंस गुलाम खाते के लिए संपादन किया।


3
ऐसा इसलिए है क्योंकि गैर-लॉगिन शेल न तो पढ़ा जाता है और न /etc/profileही~/.profile
विन्सेन्ज़ो

9

इस उत्तर की जानकारी पुरानी है। आपको कन्फिगर्ड जेनकिंस> पर जाने की आवश्यकता है और फिर आप वहां से एक पर्यावरण चर कुंजी-मूल्य जोड़ी जोड़ने के लिए क्लिक कर सकते हैं।

उदाहरण के लिए: export MYVAR=testहोगा MYVARकुंजी है, और testमूल्य है।


5

मेरे नए EC2 उदाहरण में, जेनकींस उपयोगकर्ता के नए मूल्य को जोड़ने के लिए .PATH का PATH और फिर टोमैट को फिर से शुरू करना मेरे लिए काम करता है।

एक पुराने उदाहरण में, जहां कॉन्फ़िगरेशन अलग है, सागर के उत्तर से # 2 का उपयोग करना केवल एक चीज थी जो काम की थी (यानी। लाभकारी, .bash * काम नहीं किया)।


4

मुझे उसके लिए दो प्लगइन्स मिले। एक फ़ाइल से मानों को लोड करता है और दूसरा आपको नौकरी कॉन्फ़िगरेशन स्क्रीन में मानों को कॉन्फ़िगर करने देता है।

Envfile Plugin - यह प्लगइन आपको एक फाइल के माध्यम से पर्यावरण चर सेट करने में सक्षम बनाता है। फ़ाइल का प्रारूप मानक जावा संपत्ति फ़ाइल प्रारूप होना चाहिए।

EnvInject Plugin - यह प्लगइन पर्यावरण चर को जोड़ना और नौकरी के लिए एक वातावरण स्थापित करने के लिए एक सेटअप स्क्रिप्ट को निष्पादित करना संभव बनाता है।


4

क्या आप इसे जेनकिंस सेटिंग में पर्यावरण चर के रूप में नहीं जोड़ सकते:

जेनकिंस प्रबंधित करें -> वैश्विक गुण> पर्यावरण चर: और फिर एक संपत्ति PATH और इसके मूल्य को जोड़ने के लिए "जोड़ें" पर क्लिक करें।


1
1.620 संस्करण में "जेनकींस प्रबंधित करें> सिस्टम कॉन्फ़िगर करें -> पर्यावरण चर" लगता है।
एकैहोला

4

इस तरह मैंने इस कष्टप्रद मुद्दे को हल किया:

मैंने PATHचर को बदल दिया जैसा कि @ सागर ने अपने दूसरे विकल्प में सुझाया था, लेकिन फिर भी मुझे PATHमेरी अपेक्षा से अलग मूल्य मिला ।

आखिरकार मुझे पता चला कि यह वह EnvInjectप्लगइन था जिसने मेरे PATHचर को बदल दिया था !

इसलिए मैं या तो अनइंस्टॉल EnvInjectकर सकता हूं या सिर्फ इसका उपयोग पैथ वेरिएबल को इंजेक्ट करने के लिए कर सकता हूं ।

हमारे कई जेनकिंस जॉब्स उस प्लगइन का उपयोग करते हैं, मैं इसे अनइंस्टॉल नहीं करना चाहता था ...

इसलिए मैंने एक फ़ाइल बनाई: environment_variables.propertiesमेरे जेनकींस होम डायरेक्टरी के तहत।

इस फ़ाइल में पथ पर्यावरण मान था जिसकी मुझे आवश्यकता थी PATH=$PATH:/usr/local/git/bin/:।

जेनकींस वेब इंटरफ़ेस से Manage Jenkins -> Configure System:। उस स्क्रीन में - मैंने Prepare jobs environmentविकल्प पर टिक किया , और Properties File Pathफ़ील्ड में मैंने अपनी फ़ाइल में पथ दर्ज किया /var/lib/jenkins/environment_variables.properties:।

इस तरह से हर जेनकिंस जॉब हमें इस environment_variables.propertiesफाइल में जो भी वैरिएबल मिलता है ।


1
यह सही उत्तर होना चाहिए। जैसा कि कहा गया है अपडेट / आदि / प्रोफाइल OSX पर संभव समाधान नहीं है क्योंकि फ़ाइल को केवल पढ़ा जाता है और अनुमतियों के साथ गड़बड़ करने की आवश्यकता होती है। यह समाधान सबसे साफ लगता है और जेनकिंस पर पहले से मौजूद प्लगइन्स का उपयोग करता है। एक बार अपनी प्रॉपर्टीज़ फ़ाइल बनाने और जेनकींस पर सेट करने के बाद जेनकींस को फिर से शुरू करने के लिए याद रखें
Voke Ransom Anighoro

3

जेनकिंस PATH+<name>पैठ के लिए ही नहीं, किसी भी चर के लिए प्रारूप का समर्थन करता है :

वैश्विक पर्यावरण चर या नोड पर्यावरण चर:

जेनकिंस चर + संकेतन

यह पाइपलाइन चरण में भी समर्थित है withEnv:

node {
  withEnv(['PATH+JAVA=/path/to/java/bin']) {
    ...
  }
}

बस ध्यान दें, यह चर के लिए प्रस्तुत करता है। यदि इसे जोड़ा जाना चाहिए तो आपको वह करने की आवश्यकता है जो अन्य उत्तर दिखाते हैं।

यहाँ पाइपलाइन चरणों दस्तावेज़ देखें ।

आप $ PATH को प्रीपेन्ड / कुछ करने के लिए सिंटैक्स PATH + WHATEVER = / कुछ का उपयोग कर सकते हैं

या यहाँ EnvVars पर जावा डॉक्स ।


2

मैंने केवल "/etc/init.d/jenkins बल-पुनः लोड" के बाद इस मुद्दे पर प्रगति की थी। मैं सलाह देता हूं कि किसी भी चीज़ से पहले कोशिश करें, और फिर से शुरू करने के बजाय इसका उपयोग करें।


1
और आपने वास्तव में PATH तत्व को कहां जोड़ा है? मैंने हर उस जगह की कोशिश की है जिसकी मैं कल्पना कर सकता हूं।
१०:३४ पर अस्तबलोग

2

मेरे Ubuntu 13.04 पर, मैंने इसके साथ सफल होने से पहले काफी कुछ बोलने की कोशिश की:

  1. /Etc/init/jenkins.conf संपादित करें
  2. उस स्थान का पता लगाएँ, जहां "स्टार्ट-स्टॉप-सर्वर ... निष्पादित" होता है
  3. उससे ठीक पहले पर्यावरण अद्यतन डालें, अर्थात

निर्यात पथ = $ पथ: / कुछ / नया / पथ / बिन


2

जोड़ना

/usr/bin/bash

पर

जेनकिंस -> जेनकींस प्रबंधित करें -> कॉन्फ़िगर सिस्टम -> शेल-> शैल निष्पादन योग्य

जेनकिंस sh का उपयोग करते हैं ताकि मेरे लिए भी / etc / प्रोफाइल काम न करे जब मैं इसे जोड़ूंगा, मेरे पास सभी env हैं।


जेनकिंस के किस संस्करण ने आपके लिए @ sumang_87 का काम किया? यह जेनकिंस 2.9 पर मेरी मदद करने में विफल रहा
हैमएक्स 0

1

समाधान जो मेरे लिए काम किया

source ~/.bashrc

व्याख्या

मैंने पहली बार सत्यापित किया था कि जेनकिंस BASH चला रहा था, echo $SHELLऔर echo $BASH(ध्यान दें कि मैं स्पष्ट रूप #!/bin/bashसे जेनेकिंस में टेक्सारिया डाल रहा हूं, मुझे यकीन नहीं है कि यह BASH पाने के लिए आवश्यक है)। sourceआईएनजी के /etc/profileरूप में दूसरों का सुझाव दिया काम नहीं कर रहा था।

/etc/profileमुझे देख कर लगा

if [ "$PS1" ]; then
...

और "$ PS1" के निरीक्षण ने इसे शून्य पाया। मैं इस $PS1तरह से कोई फायदा नहीं हुआ स्पूफिंग की कोशिश की

export PS1=1
bash -c 'echo $PATH'

हालाँकि इससे वांछित परिणाम नहीं मिला (बाकी $PATHमैं देखने की उम्मीद करता हूं) जोड़ें। लेकिन अगर मैं बैश को इंटरएक्टिव बताता हूं

export PS1=1
bash -ci 'echo $PATH'

$PATHके रूप में मैं उम्मीद को बदल दिया गया।

मैं यह पता लगाने की कोशिश कर रहा था कि /etc/bash.bashrcलोड करने के लिए इंटरएक्टिव शेल को ठीक से कैसे खराब किया जाए , लेकिन यह पता चलता है कि मुझे जो कुछ भी चाहिए था वह नीचे था ~/.bashrc, इसलिए बस sourceइसे हल किया समस्या।


#!/bin/bash -elलॉगिन शेल के रूप में शुरू करने के लिए बैश बताने के लिए उपयोग करना सुनिश्चित करें । यह आवश्यक। स्रोत फ़ाइलों के लिए बैश का कारण बन सकता है
ब्रैंडन

1

मैंने ऊपर से सभी चीजों की कोशिश की - मेरे लिए काम नहीं किया।

मुझे दो समाधान मिले (दोनों SSH- दास के लिए)

  1. गुलाम सेटिंग पर जाएं

  2. एक नया वातावरण चर जोड़ें

  3. पथ
  4. $ {पथ}: $ {गृह} / पब-कैश / बिन:।। $ {गृह} / स्थानीय / बिन

"$ {HOME}" भाग महत्वपूर्ण है। यह अतिरिक्त पथ को पूर्ण बनाता है। सापेक्ष पथ मेरे काम नहीं आया।

विकल्प II (पाइपलाइन-स्क्रिप्ट)

pipeline {
    agent {
        label 'your-slave'
    }
    environment {
        PATH = "/home/jenkins/.pub-cache/bin:$PATH"
    }
    stages {
        stage('Test') {
            steps {
                ansiColor('xterm') {
                    echo "PATH is: $PATH"
                }
            }
        }
    }
}

0

उबंटू पर मैं सिर्फ / etc / default / jenkins संपादित करता हूं और अंत में स्रोत / etc / प्रोफ़ाइल जोड़ता हूं और यह मेरे लिए काम करता है।


0

पर्यावरण चर सेट के साथ कमांड चलाना भी प्रभावी है। बेशक, आपको इसे आपके द्वारा चलाए जाने वाले प्रत्येक कमांड के लिए करना होगा, लेकिन आपके पास शायद एक नौकरी की स्क्रिप्ट है, इसलिए आपके पास शायद प्रति निर्माण केवल एक कमांड है। मेरी नौकरी की स्क्रिप्ट एक अजगर स्क्रिप्ट है जो पर्यावरण का उपयोग करने के लिए तय करती है कि किस अजगर का उपयोग करना है, इसलिए मुझे अभी भी इसके रास्ते में /usr/local/bin/python2.7 डालने की आवश्यकता है:

PATH=/usr/local/bin <my-command>

0

मेरे लिए जो काम किया गया था, वह दास के लिए पाथ के माहौल को पछाड़ रहा था।

Set:   PATH 
To:    $PATH:/usr/local/bin

फिर गुलाम को डिस्कनेक्ट करके फिर से कनेक्ट करना।

सिस्टम की जानकारी के बावजूद यह काम कर रहा था।


0

मेरे पास जेनकीस 1.639 है जो एसएलईएस 11 एसपी 3 पर जिपर (पैकेज मैनेजर) के माध्यम से स्थापित है। एक सेवा के रूप में कॉन्फ़िगर किए गए जेनकिंस की स्थापना

 # service jenkins
 Usage: /etc/init.d/jenkins {start|stop|status|try-restart|restart|force-reload|reload|probe}

हालांकि /etc/init.d/jenkinsसूत्रों का कहना है /etc/sysconfig/jenkins, किसी भी env चर सेट वहाँ जेनकींस प्रक्रिया है क्योंकि यह इस तरह एक नया पर्यावरण के साथ एक अलग लॉगिन खोल में शुरू कर दिया है द्वारा नहीं ली गई है:

startproc -n 0 -s -e -l /var/log/jenkins.rc -p /var/run/jenkins.pid -t 1 /bin/su -l -s /bin/bash -c '/usr/java/default/bin/java -Djava.awt.headless=true -DJENKINS_HOME=/var/lib/jenkins -jar /usr/lib/jenkins/jenkins.war --javaHome=/usr/java/default --logfile=/var/log/jenkins/jenkins.log --webroot=/var/cache/jenkins/war --httpPort=8080 --ajp13Port=8009 --debug=9 --handlerCountMax=100 --handlerCountMaxIdle=20 &' jenkins

जिस तरह से मैं जेनकींस प्रक्रिया के लिए env var सेट करने में कामयाब रहा, वह .bashrcइसके होम डायरेक्टरी में है - /var/lib/jenkins। मुझे बनाना था /var/lib/jenkins/.bashrcक्योंकि यह पहले मौजूद नहीं था।


0

यहाँ मैंने ubuntu 18.04 LTS पर जेनकिंस 2.176.2 के साथ क्या किया

मैंने .bash_aliases फ़ाइल बनाई और उसमें पथ, प्रॉक्सी चर और इसी तरह जोड़ा।

.Bashrc की शुरुआत में यह परिभाषित किया गया था।

# If not running interactively, don't do anything
case $- in
    *i*) ;;
      *) return;;
esac

तो यह जाँच कर रहा है कि यदि हम गैर-संवादात्मक खोल शुरू कर रहे हैं तो हम यहाँ कुछ नहीं करते हैं।

.bashrc के नीचे .bash_aliases के लिए शामिल किया गया था

# Alias definitions.
# You may want to put all your additions into a separate file like
# ~/.bash_aliases, instead of adding them here directly.
# See /usr/share/doc/bash-doc/examples in the bash-doc package.

if [ -f ~/.bash_aliases ]; then
    . ~/.bash_aliases
fi

इसलिए मैं .bash_aliases को पहले गैर-संवादात्मक चेक के ऊपर .bashrc पर लोड करता हूं।

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


-1

1- अपनी प्रोफाइल फाइल में ".bash_profile" फाइल जोड़ें

यह "/ home / your_user /" फ़ोल्डर में है

vi .bash_profile

जोड़ें:

export JENKINS_HOME=/apps/data/jenkins  
export PATH=$PATH:$JENKINS_HOME

==> यह ई जेनकिंस कार्यक्षेत्र है

2- अगर आप जेट्टी का इस्तेमाल करते हैं: jenkins.xml फाइल पर जाएं

और जोड़ :

<Arg>/apps/data/jenkins</Arg>
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.