জেনকিনসে পরিবেশের পরিবর্তনশীল কীভাবে সেট করবেন?


228

আমি কিছু করতে সক্ষম হতে চাই:

AOEU=$(echo aoeu)

এবং জেনকিনস সেট আছে AOEU=aoeu

পরিবেশ ভেরিয়েবল জেনকিন্স অধ্যায় যে কি করে না। পরিবর্তে, এটি সেট AOEU='$(echo aoeu)'

আমি কীভাবে জেনকিন্সকে একটি শেল কমান্ড মূল্যায়ন করতে এবং পরিবেশের পরিবর্তনশীলকে আউটপুট বরাদ্দ করতে পারি?

অবশেষে, আমি এমন একটি পরিবেশকের ভেরিয়েবলকে এমন কোনও কাজের নির্বাহককে নিয়োগ করতে সক্ষম হতে চাই যা অন্য স্ক্রিপ্টগুলিতে প্রবেশ করতে বা ব্যবহার করতে পারে।


2
এনভিআইনজেক্ট প্লাগইনে কিছু গুরুতর সুরক্ষা দুর্বলতা রয়েছে। এখন জেনকিন্স এই জন্য Inbuilt সমর্থন হচ্ছে না stackoverflow.com/a/53430757/1753177
lambodar

@ ললম্বোদর লিঙ্কটি কেবল প্রশ্নটিতে যায়
জেড।

@ জেড.কোচরান, এটি একটি উত্তরের লিঙ্ক যা লেখক মুছে ফেলেছে।
নোয়েল ইয়াপ

উত্তর:


217

এটি নিম্নলিখিত উপায়ে এনভিজনেক্ট প্লাগইনের মাধ্যমে করা যেতে পারে :

  1. চলমান একটি "চালিত শেল" বিল্ড পদক্ষেপ তৈরি করুন:

    echo AOEU=$(echo aoeu) > propsfile
    
  2. ইনজেকশন এনভায়রনমেন্ট ভেরিয়েবলগুলি বিল্ড স্টেপ তৈরি করুন এবং এতে "প্রোপার্টি ফাইল পাথ" সেট করুন propsfile

দ্রষ্টব্য : এই প্লাগইনটি (বেশিরভাগ ক্ষেত্রে) পাইপলাইন প্লাগইনের সাথে সামঞ্জস্য নয়।


4
EnvInject আমি উপরে যে পরিস্থিতি দিয়েছি তা পরিচালনা করে না: [EnvInject] - পরিবেশের আকার হিসাবে ইনজেকশনের বৈশিষ্ট্যগুলির বিষয়বস্তু এওইইউ = $ (প্রতিধ্বনি) [এনভিনিজেক্ট] - ভেরিয়েবলগুলি সফলভাবে ইনজেকশন দেওয়া হয়েছে। [EnvInject] - অমীমাংসিত 'AOEU' পরিবর্তনশীল আনসেট করুন।
নোয়েল ইয়াপ

1
এই সমাধানটি ইউনিক্স শেল সিনট্যাক্স ব্যবহার করে এবং উইন্ডোতে কাজ করবে না।
fbmd

2
@fbmd আমি এটি উইন্ডোতে চালাচ্ছি। আপনার কেবল shপথেই রয়েছে তা নিশ্চিত করা দরকার ।
কাস্টোডিও

2
"এক্সিকিউট শেল" কোনও ত্রুটি সহ প্রস্থান করলে এনভিজনেক্ট কাজ করে না কারণ বিল্ডটি ইনজেকশন অংশে অগ্রসর হয় না।
চাদী

1
@ ভিটিম.ইউস, fooসেই নির্দিষ্ট শেল অ্যাকশনে রফতানি হবে তবে অন্যান্য ক্রিয়ায় নয়।
নোয়েল ইয়াপ

109

সহজ উপায়

আপনি বিল্ড স্টার্টআপে এনভায়রনমেন্ট প্লাগইন এনভায়রনমেন্ট ভেরিয়েবল ইনজেক্ট করতে ব্যবহার করতে পারেন । উদাহরণ স্বরূপ:

'বিল্ড এনভায়রনমেন্ট' -> 'বিল্ড প্রসেসে এনভায়রনমেন্ট ভেরিয়েবল' -> 'প্রোপার্টি কনটেন্ট' এর আওতায় কী = মান (বাশ ওকে!) যুক্ত করুন

আপনি কীভাবে জানেন যে এটি কাজ করছে

এনভিজনেক্ট - ভেরিয়েবলগুলি সফলভাবে ইনজেকশনের জন্য


5
শেল কমান্ডের ফলাফলের উপর ভিত্তি করে মানটি সেট করার চেষ্টা করুন।
নোয়েল ইয়াপ

1
@ নোয়েলইপও কাজ করে, যতক্ষণ না শেষ পর্যন্ত লাইনটি মূল্যায়ন করে 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"])'
কেনে_কি

@ থ্যাফুঙ্কিইঞ্জাইনার আপনি এনভিনিস্টের কোন সংস্করণ ব্যবহার করছেন? 1.91.3 দিয়ে আপনার মত একটি কমান্ড "বিড়াল = অ্যাপ ..." হিসাবে ব্যাখ্যা করা হয়। এই বৈশিষ্ট্যটি সমর্থিত হলে দুর্দান্ত হবে তবে আমি বুঝতে পারি যে এটি দুর্ঘটনাক্রমে আপনার জন্য কাজ করেছে।
হত্যা করুন kill

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


56

আমার ক্ষেত্রে, JMETER_HOMEআমার জিনকিন্স সার্ভারের সমস্ত প্রকল্প জুড়ে আমার পিঁপড়া বিল্ড স্ক্রিপ্টগুলির মাধ্যমে উপলব্ধ পরিবেশের পরিবর্তনশীল যুক্ত করার দরকার ছিল (লিনাক্স), এমনভাবে যাতে আমার স্থানীয় বিল্ড এনভায়রনমেন্ট (উইন্ডোজ এবং ম্যাক) build.xmlস্ক্রিপ্টে হস্তক্ষেপ না করে in । ম্যানেজ জেনকিন্স - সিস্টেম কনফিগার করুন - বৈশ্বিক বৈশিষ্ট্যগুলি সম্পন্ন করার জন্য সবচেয়ে সহজ এবং অন্তত অন্তর্ভুক্তি পদ্ধতিতে পরিবেশের পরিবর্তনশীল স্থাপন করা । কোনও প্লাগইন প্রয়োজন নেই।

জেনকিন্স গ্লোবাল প্রোপার্টি পরিচালনা করুন


এনভায়রনমেন্ট ভেরিয়েবলটি তখন পিঁপড়ে এর মাধ্যমে পাওয়া যায়:

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

এটি যুক্ত করে কাজগুলিতে যাচাই করা যেতে পারে:

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

যা উত্পাদন করে:

জেমিটার হোম: ~ / .জমিটার


এটি একটি বিশ্ব সম্পত্তি। এটি জেনকিন্সের সমস্ত কাজের উপর প্রভাব ফেলবে। মনে করি আমি এই সম্পত্তিটি কেবল একটি কাজের জন্য চাই?
ইগোরগানাপলস্কি

আমি জেনকিন্স পরিচালনা জুড়েছেন - কনফিগার সিস্টেম - গ্লোবাল সম্পত্তি, নিম্নলিখিত: git /path/to/my/gitএবং PATH+git /path/to/my/git। যাইহোক, যদি আমি অ্যাক্সেস করার চেষ্টা করছি gitA থেকে Jenkins pipeline scriptআমি পাবেন: /bin/sh: git: command not found
অক্টাভিয়ান

1
আমার কেবলমাত্র জাভা_হোম এনভায়রনমেন্ট ভেরিয়েবল সেটআপ করা দরকার এবং এই উত্তরটিই আমাকে সহায়তা করেছিল।
Sandoval0992

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

এনভিআইনজেক্ট প্লাগইন ওরফে ( এনভায়রনমেন্ট ইনজেক্টর প্লাগইন ) আপনাকে জেনকিনস কনফিগারেশন থেকে পরিবেশের ভেরিয়েবল সেট করার বিভিন্ন বিকল্প দেয়।

নির্বাচন করে 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

নেই বিল্ড ENV প্রচারক প্লাগইন আপনি নতুন বিল্ড এনভায়রনমেন্ট ভেরিয়েবল, যেমন যোগ করতে দেয় যা

জেনকিনস বিল্ড - পরিবেশের ভেরিয়েবলগুলি প্রচার করুন

যে কোনও ধারাবাহিক প্রচার বিল্ড এনভায়রনমেন্ট ভেরিয়েবল পদক্ষেপ পূর্বনির্ধারিত পরিবেশ পরিবর্তনশীল মানগুলিকে ওভাররাইড করবে।


ধন্যবাদ! বিল্ড এনভ প্রোপাগেটর প্লাগইন যখন চেষ্টা করেছিলাম তখন কাজ করেছিল এবং বিল্ড স্টেপগুলির সময় পরিবেশের ভেরিয়েবল সেট করার দক্ষতা অর্জন করা দুর্দান্ত!
twasbrillig

10

আমার ক্ষেত্রে, আমি নীচের বিকল্পটি ব্যবহার করে পরিবেশের পরিবর্তনগুলি কনফিগার করেছি এবং এটি কাজ করেছে-

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

এটি সর্বোত্তম উপায়
লং এনগুইন

7

সাধারণত আপনি কনফিগার করতে পারেন এনভায়রনমেন্ট ভেরিয়েবল মধ্যে গ্লোবাল বৈশিষ্ট্য মধ্যে কনফিগার সিস্টেম

তবে শেল সাবস্টিটিউশন সহ গতিশীল ভেরিয়েবলগুলির জন্য, আপনি জেনকিনস হোম ডিরে একটি স্ক্রিপ্ট ফাইল তৈরি করতে এবং বিল্ড চলাকালীন এটি সম্পাদন করতে চাইতে পারেন। এসএসএইচ অ্যাক্সেস প্রয়োজন। উদাহরণ স্বরূপ.

  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
প্রয়াগগপড

@ প্রয়াগআপ্ড আপনাকে একটি সম্পূর্ণ লগইন অনুকরণ su -lকরতে হবে , তাই এটি করার জন্য প্যারামিটার ব্যবহার করুন , অন্যথায় একটি পৃথক প্রশ্ন জিজ্ঞাসা করুন।
কেনারব

স্ক্রিপ্টটি চাওয়ার পরে @ টেনারব, আমি কীভাবে আবার এনভির ভেরিয়েবল পড়ব? উদাহরণস্বরূপ, এটি sh "" "উত্সটি কাজ করে না v / load_env.sh প্রতিধ্বনিত" VM_NAME: $ VM_NAME "প্রতিধ্বনি" VM_NAME: $ {VM_NAME} "" ""
অগং

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

পরিবেশ স্ক্রিপ্ট প্লাগিন ( গিটহাব ) চেষ্টা করুন যা এনভিনিজেক্টের সাথে খুব মিল । এটি আপনাকে বিল্ডের আগে স্ক্রিপ্ট চালানোর অনুমতি দেয় (এসসিএম চেকআউট পরে) যা এর জন্য পরিবেশের ভেরিয়েবল উত্পন্ন করে। যেমন

জেনকিনস বিল্ড - নিয়মিত কাজ - পরিবেশ তৈরি করুন

এবং আপনার স্ক্রিপ্টে, আপনি FOO=barসেই পরিবর্তনশীলটি সেট করতে মান আউটপুট হিসাবে উদাহরণস্বরূপ মুদ্রণ করতে পারেন ।

একটি বিদ্যমান PATHস্টাইল ভেরিয়েবল সংযোজন উদাহরণ :

echo PATH+unique_identifier=/usr/local/bin

সুতরাং আপনি স্ক্রিপ্টে যা যা প্রয়োজন তা করতে পারেন - catফাইল বা আপনার প্রকল্পের উত্স ট্রি থেকে অন্য কোনও ভাষায় স্ক্রিপ্ট চালান etc.


1

আপনি নীচের তালিকাভুক্ত নিম্নলিখিত যে কোনও একটি ব্যবহার করতে পারেন:

  1. ব্যবহার করুন ENV উদ্বুদ্ধ প্লাগইন এনভায়রনমেন্ট ভেরিয়েবল তৈরি করার জন্য। ব্যবহার এবং আরও বিশদ সম্পর্কে এটি অনুসরণ করুন https://github.com/jenkinsci/envinject-plugin
    1. নীচে নেভিগেট করুন এবং যোগ করতে পারেন

জেনকিন্স পরিচালনা করুন -> সিস্টেম কনফিগার করুন -> গ্লোবাল প্রোপার্টি -> পরিবেশ পরিবর্তনসমূহ -> অ্যাড করুন

এখানে চিত্র বর্ণনা লিখুন


0

কিছু কারণে ব্যবহারকারীরsudo su - jenkins জন্য আমাকে লগ না করে , আমি ভিন্ন পদ্ধতির ব্যবহার করে শেষ করেছি।jenkins

আমি জেনকিন config.xmlএ ব্যবহার করে বিশ্বব্যাপী এনভির ভেরিয়েবলগুলি সফল করতে পেরেছিলাম/var/lib/jenkins/config.xml বাহ্যিক প্লাগিন ব্যবহার না করেই - (লিনাক্সের / rhel মধ্যে ইনস্টল করা)।

আমি কেবল জেনকিনস যুক্ত করতে হবে তারপরে যুক্ত করতে চাই 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)
    }
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.