जेनकिंस में पर्यावरण चर कैसे सेट करें?


228

मैं ऐसा कुछ करने में सक्षम होना चाहता हूं:

AOEU=$(echo aoeu)

और जेनकिंस सेट है AOEU=aoeu

पर्यावरण चर जेनकींस में अनुभाग है कि नहीं करता है। इसके बजाय, यह सेट करता है AOEU='$(echo aoeu)'

मैं जेनकिन्स को शेल कमांड का मूल्यांकन करने और पर्यावरण चर के लिए आउटपुट कैसे दे सकता हूं?

आखिरकार, मैं एक नौकरी के निष्पादक को एक पर्यावरण चर को सौंपने में सक्षम होना चाहता हूं जिसे अन्य लिपियों द्वारा पारित या उपयोग किया जा सकता है।


2
EnvInject प्लगइन में कुछ गंभीर सुरक्षा भेद्यता है। अब जेनकिन्स को इस stackoverflow.com/a/53430757/1753177 के
लंबोदर

@ लेम्बोदर लिंक सिर्फ सवाल पर जाता है
ज़ेड कोक्रेन

@ Z.Cochrane, यह एक उत्तर के लिए एक लिंक है जिसे लेखक द्वारा हटा दिया गया है।
नोएल याप

जवाबों:


217

यह EnvInject प्लगइन के माध्यम से निम्न तरीके से किया जा सकता है :

  1. एक "निष्पादित शेल" बनाएं जो कदम चलाता है:

    echo AOEU=$(echo aoeu) > propsfile
    
  2. एक इंजेक्ट वातावरण वैरिएबल बनाएँ कदम और सेट करने के लिए "गुण फ़ाइल पथ" propsfile

नोट : यह प्लगइन (ज्यादातर) पाइपलाइन प्लगइन के साथ संगत नहीं है।


4
EnvInject मैं ऊपर दी गई स्थिति को संभाल नहीं पाता है: [EnvInject] - पर्यावरण के रूप में इंजेक्ट करने से प्रॉपर्टीज कंटेंट AOEU = $ (echo aoeu) [EnvInject] - वेरिएबल्स को सफलतापूर्वक इंजेक्ट किया जाता है। [EnvInject] - अनसुलझे 'AOEU' वेरिएबल को।
नोएल याप

1
वह समाधान यूनिक्स शेल सिंटैक्स का उपयोग करता है और विंडोज़ पर काम नहीं करेगा।
fbmd

2
@fbmd मैं इसे विंडोज पर चला रहा हूं। आपको बस यह सुनिश्चित करने की आवश्यकता है कि आपके पास shमार्ग है।
कस्टोडियो

2
EnvInject काम नहीं करता है अगर "निष्पादित शेल" एक त्रुटि के साथ बाहर निकलता है क्योंकि निर्माण इंजेक्शन भाग के लिए आगे नहीं बढ़ता है।
चाडी

1
@ Vitim.us, fooउस विशिष्ट शेल कार्रवाई में निर्यात किया जाएगा , लेकिन अन्य कार्यों में नहीं।
नोएल याप

109

सबसे सरल तरीका

बिल्ड स्टार्टअप पर पर्यावरण चर इंजेक्ट करने के लिए आप EnvInject प्लगइन का उपयोग कर सकते हैं । उदाहरण के लिए:

'बिल्ड एनवायरनमेंट' के अंतर्गत कुंजी = मान (बैश ओके!) जोड़ें -> 'पर्यावरण वेरिएबल्स टू बिल्ड प्रोसेस' -> 'गुण सामग्री'

आप कैसे जानते हैं कि यह काम कर रहा है

EnvInject - चर को सफलतापूर्वक इंजेक्ट किया गया


5
शेल कमांड के आउटपुट के आधार पर मान सेट करने का प्रयास करें।
नोएल याप

1
@NoelYap भी काम करता है, जब तक कि अंत में लाइन का मूल्यांकन नहीं होता है key=value। मेरे उपयोग के मामले में मैं पूरी तरह से लाइन उत्पन्न करता हूं: cat app/build.gradle | grep "def majorVersion" | python -c 'import sys,re,os; print("VERSION_NUMBER="+re.findall(r"[\d+\.]+", sys.stdin.read())[0]+os.environ["BUILD_NUMBER"])'
kenn_k

@TheFunkyEngineer EnvInject के किस संस्करण का आप उपयोग कर रहे हैं? 1.91.3 के साथ, आपकी तरह एक कमांड को "कैट = ऐप ..." के रूप में व्याख्या किया गया है। बहुत अच्छा होगा यदि इस सुविधा का समर्थन किया गया था, लेकिन मुझे समझ में आ रहा है कि यह आपके लिए दुर्घटना से काम कर सकता है।
मारथ्रश

1
एक शेल कमांड के उत्पादन को कोई मान निर्दिष्ट करने के प्रयास में मेरे लिए काम कर रहा है नहीं या तो: BUILD_DATE=date "+%Y-%m-%d-%H_%M_%S"और BUILD_DATE=$(date "+%Y-%m-%d-%H_%M_%S")और BUILD_DATE=`date "+%Y-%m-%d-%H_%M_%S"`मेरे लिए काम नहीं किया था
scottysseus

1
@scottyseus I ने इस wiki.jenkins-ci.org/display/JENKINS/Environment +Script+Plugin को एक आकर्षण की तरह काम करते हुए समाप्त कर दिया । stackoverflow.com/a/38286383/1240268
एंडी हेडन

56

मेरे मामले में, मुझे JMETER_HOMEअपने जेनेकिन्स सर्वर (लिनक्स) पर सभी परियोजनाओं के माध्यम से अपने एंट बिल्ड स्क्रिप्ट के माध्यम से उपलब्ध होने वाले पर्यावरण चर को जोड़ने की आवश्यकता थी , एक तरह से जो build.xmlस्क्रिप्ट में मेरे स्थानीय बिल्ड पर्यावरण (विंडोज और मैक) के साथ हस्तक्षेप नहीं करेगा । मैनेज जेंकिंस - कन्फिगर सिस्टम के माध्यम से पर्यावरण चर को सेट करना - वैश्विक गुण इसे पूरा करने का सबसे आसान और कम से कम घुसपैठ तरीका था। कोई प्लग-इन आवश्यक नहीं है।

Jenkins Global Properties प्रबंधित करें


पर्यावरण चर तो चींटी के माध्यम से उपलब्ध है:

<property environment="env" />
<property name="jmeter.home" value="${env.JMETER_HOME}" />

इसे जोड़कर काम करने के लिए सत्यापित किया जा सकता है:

<echo message="JMeter Home: ${jmeter.home}"/>

जो पैदा करता है:

JMeter होम: ~ / .jmeter


वह एक वैश्विक संपत्ति है। यह जेनकिंस पर सभी नौकरियों को प्रभावित करेगा। माना कि मैं सिर्फ एक नौकरी के लिए यह संपत्ति चाहता हूं?
इगोरगानापल्स्की 21

मैंने Jenkins को प्रबंधित करने के लिए जोड़ा है - सिस्टम कॉन्फ़िगर करें - वैश्विक गुण, निम्नलिखित: git /path/to/my/gitऔर PATH+git /path/to/my/git। हालांकि, अगर मैं का उपयोग करने की कोशिश कर रहा हूँ gitएक से Jenkins pipeline script, मैं मिलता है: /bin/sh: git: command not found
ऑक्टेवियन

1
मुझे सिर्फ JAVA_HOME पर्यावरण चर सेट करने की आवश्यकता थी और यह उत्तर मुझे मदद करने वाला था।
सांडोवल

19

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

  1. जेनकिंस वेब इंटरफेस से, Manage Jenkins > Manage Pluginsप्लगइन पर जाएं और इंस्टॉल करें।

पर्यावरण इंजेक्टर प्लगिन

  1. अपनी नौकरी Configureस्क्रीन पर जाएं
  2. अनुभाग Add build stepमें खोजें Buildऔर चुनेंInject environment variables
  3. वांछित पर्यावरण चर को VARIABLE_NAME = VALUE पैटर्न के रूप में सेट करें। मेरे मामले में, मैंने USERPROFILE चर का मान बदल दिया

यहां छवि विवरण दर्ज करें

यदि आपको कुछ शर्तों (जैसे नौकरी मापदंडों) के आधार पर एक नए पर्यावरण चर को परिभाषित करने की आवश्यकता है, तो आप इस उत्तर को संदर्भित कर सकते हैं ।


16

आप कुछ इस तरह की कोशिश कर सकते हैं

stages {
        stage('Build') {
            environment { 
                    AOEU= sh (returnStdout: true, script: 'echo aoeu').trim()
                }
            steps {
                sh 'env'
                sh 'echo $AOEU'
            }
        }
    }

यह पार्स नहीं करता है।
rjurney

2
यह फॉर्मेट जेनकिंसफाइल पाइपलाइन परियोजना के लिए है। आप इस स्निपेट का उपयोग किस कार्य प्रकार में कर रहे हैं?
JSixface

1
यह पूरी तरह से एक Jenkinsfileपाइपलाइन के लिए काम करता है (नौकरी नहीं)! यह बहुत बढ़िया है, इसके लिए धन्यवाद!
मैथिलियो

14

EnvInject Plugin aka ( पर्यावरण इंजेक्टर प्लगइन ) आपको जेनकिंस कॉन्फ़िगरेशन से पर्यावरण चर सेट करने के लिए कई विकल्प देता है।

चुनकर Inject environment variables to the build processआपको मिलेगा:

  • Properties File Path
  • Properties Content
  • Script File Path

  • Script Content

  • और अंत में Evaluated Groovy script


Evaluated Groovy scriptआपको निष्पादित कमांड के परिणाम के आधार पर पर्यावरण चर सेट करने की संभावना देता है :

  • executeविधि के साथ :
    return [HOSTNAME_SHELL: 'hostname'.execute().text, 
        DATE_SHELL: 'date'.execute().text,
        ECHO_SHELL: 'echo hello world!'.execute().text
    ]
  • या स्पष्ट Groovyकोड के साथ :
    return [HOSTNAME_GROOVY: java.net.InetAddress.getLocalHost().getHostName(),
        DATE_GROOVY: new Date()
    ] 

(प्रत्येक विधि के बारे में अधिक विवरण बिल्ड-इन हेल्प (?) में पाया जा सकता है)


दुर्भाग्य से आप ऐसा नहीं कर सकते जैसा Script Contentकि यह बताता है:

एक स्क्रिप्ट फ़ाइल का निष्पादन करें जिसका उद्देश्य एक वातावरण सेट करना है जैसे कि फ़ोल्डर बनाना, फ़ाइलों की प्रतिलिपि बनाना, और इसी तरह। स्क्रिप्ट फ़ाइल सामग्री दें। आप उपरोक्त गुण चर का उपयोग कर सकते हैं। हालाँकि, स्क्रिप्ट में पर्यावरण चर जोड़ने या ओवरराइड करने से बिल्ड जॉब में कोई प्रभाव नहीं पड़ता है


12

नहीं है बिल्ड पर्यावरण प्रचारक प्लगइन आप नए निर्माण वातावरण चर, जैसे जोड़ सकते हैं जो

जेनकिंस बिल्ड - पर्यावरण के चर का प्रचार करें

किसी भी क्रमिक प्रचार निर्मित पर्यावरण चर चरण पहले परिभाषित पर्यावरण चर मानों को ओवरराइड करेगा।


धन्यवाद! Build Env Propagator Plugin ने तब काम किया जब मैंने इसे आजमाया, और Build steps के दौरान पर्यावरण चर सेट करने की क्षमता होना बहुत अच्छा है!
ट्वासब्रिलिग

10

मेरे मामले में, मैंने निम्न विकल्प का उपयोग करके पर्यावरण चर को कॉन्फ़िगर किया था और इसने काम किया-

Manage Jenkins -> Configure System -> Global Properties -> Environment Variables -> Add

यह सबसे अच्छा तरीका है
लॉन्ग गुयेन

7

आम तौर पर आप कॉन्फिगर सिस्टम में ग्लोबल प्रॉपर्टीज में पर्यावरण वैरिएबल को कॉन्फ़िगर कर सकते हैं ।

हालांकि शेल प्रतिस्थापन के साथ गतिशील चर के लिए, आप जेनकिंस होम डीआईआर में एक स्क्रिप्ट फ़ाइल बनाना चाहते हैं और इसे निर्माण के दौरान निष्पादित कर सकते हैं। SSH पहुंच आवश्यक है। उदाहरण के लिए।

  1. लॉग-इन जेनकिन्स के रूप में: sudo su - jenkinsयाsudo su - jenkins -s /bin/bash
  2. एक शेल स्क्रिप्ट बनाएं, जैसे:

    echo 'export VM_NAME="$JOB_NAME"' > ~/load_env.sh
    echo "export AOEU=$(echo aoeu)" >> ~/load_env.sh
    chmod 750 ~/load_env.sh
    
  3. जेनकिंस बिल्ड ( एक्ज़ेक्यूट शेल ) में, स्क्रिप्ट और उसके चर को किसी और चीज़ से पहले, जैसे

    source ~/load_env.sh
    

दुर्भाग्य से मेरे लिए काम नहीं किया। के बाद sudo su - jenkins, अभी भी echo $USERमुझे देता है root
प्रयागपाद

@prayagupd आपको एक पूर्ण लॉगिन अनुकरण करने की आवश्यकता है, इसलिए ऐसा करने के लिए su -lपैरामीटर का उपयोग करें , अन्यथा एक अलग प्रश्न पूछें।
kenorb

@kenorb स्क्रिप्ट इंवॉयर करने के बाद, मैं एनवी चर फिर से कैसे पढ़ूं? उदाहरण के लिए, यह sh "" स्रोत "/ load_env.sh इको" VM_NAME: $ VM_NAME "इको" VM_NAME: $ {VM_NAME} "" "
aung

7

यह पर्यावरण चर को संग्रहीत करने और इसे एक्सेस करने का स्निपेट है।

node {
   withEnv(["ENABLE_TESTS=true", "DISABLE_SQL=false"]) {
      stage('Select Jenkinsfile') {
          echo "Enable test?: ${env.DEVOPS_SKIP_TESTS}
          customStep script: this
      }
   }
}

नोट: पर्यावरण चर का मान स्ट्रिंग के रूप में आ रहा है। यदि आप इसे बूलियन के रूप में उपयोग करना चाहते हैं तो आपको इसे बूलियन.परसे (env.DISABLE_SQL) का उपयोग करके पार्स करना होगा।


4

एन्वायर्नमेंट स्क्रिप्ट प्लगिन ( GitHub ) आज़माएं, जो कि EnvInject के समान है । यह आपको बिल्ड (SCM चेकआउट के बाद) से पहले स्क्रिप्ट चलाने की अनुमति देता है जो इसके लिए पर्यावरण चर उत्पन्न करता है। उदाहरण के लिए

जेनकिंस बिल्ड - नियमित नौकरी - पर्यावरण का निर्माण

और आपकी स्क्रिप्ट में, आप FOO=barउस चर को सेट करने के लिए मानक आउटपुट पर उदा प्रिंट कर सकते हैं ।

मौजूदा PATH-स्टाइल चर के लिए उदाहरण के लिए :

echo PATH+unique_identifier=/usr/local/bin

इसलिए आप स्क्रिप्ट में जो कुछ भी करने के लिए स्वतंत्र हैं - या तो catएक फ़ाइल, या अपने प्रोजेक्ट के स्रोत ट्री आदि से किसी अन्य भाषा में स्क्रिप्ट चलाएं।


1

आप नीचे सूचीबद्ध निम्न तरीकों में से किसी का उपयोग कर सकते हैं:

  1. पर्यावरण चर बनाने के लिए Env Inject Plugin का उपयोग करें । उपयोग और अधिक विवरण के लिए इसका अनुसरण करें https://github.com/jenkinsci/envinject-plugin
    1. नीचे नेविगेट करें और जोड़ सकते हैं

जेनकिंस प्रबंधित करें -> कॉन्फ़िगर सिस्टम -> वैश्विक गुण -> पर्यावरण चर -> जोड़ें

यहां छवि विवरण दर्ज करें


0

किसी कारण के लिए sudo su - jenkinsमुझे jenkins उपयोगकर्ता के लिए लॉग इन नहीं करता है , मैं अलग दृष्टिकोण का उपयोग कर समाप्त हो गया।

मैं बाहरी प्लगइन्स का उपयोग किए बिना - (लिनक्स / आरएचईएल में स्थापित) config.xmlपर जेनकींस का उपयोग करके वैश्विक एनवी चर स्थापित करने में सफल रहा /var/lib/jenkins/config.xml

मुझे बस जेनकिंस जोड़ने को रोकने के लिए फिर जोड़ना था globalNodeProperties, और फिर पुनरारंभ करना था।

उदाहरण के लिए, मैं चर APPLICATION_ENVIRONMENTऔर नीचे SPRING_PROFILES_ACTIVEको परिभाषित कर रहा हूं continious_integration,

<?xml version='1.0' encoding='UTF-8'?>
<hudson>

  <globalNodeProperties>
    <hudson.slaves.EnvironmentVariablesNodeProperty>
      <envVars serialization="custom">
        <unserializable-parents/>
        <tree-map>
          <default>
            <comparator class="hudson.util.CaseInsensitiveComparator"/>
          </default>
          <int>2</int>
          <string>APPLICATION_ENVIRONMENT</string>
          <string>continious_integration</string>
          <string>SPRING_PROFILES_ACTIVE</string>
          <string>continious_integration</string>
        </tree-map>
      </envVars>
    </hudson.slaves.EnvironmentVariablesNodeProperty>
  </globalNodeProperties>
</hudson>

-3

हम नौकरी की फाइल का उपयोग करते हैं:

description('')
steps {
    environmentVariables {
        envs(PUPPETEER_SKIP_CHROMIUM_DOWNLOAD: true)
    }
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.