How to set environment variables in Jenkins?

匿名 (未验证) 提交于 2019-12-03 01:48:02

问题:

I would like to be able to do something like:

AOEU=$(echo aoeu) 

and have Jenkins set AOEU=aoeu.

The Environment Variables section in Jenkins doesn't do that. Instead, it sets AOEU='$(echo aoeu)'.

How can I get Jenkins to evaluate a shell command and assign the output to an environment variable?

Eventually, I want to be able to assign the executor of a job to an environment variable that can be passed into or used by other scripts.

回答1:

This can be done via EnvInject plugin in the following way:

  1. Create an "Execute shell" build step that runs:

    echo AOEU=$(echo aoeu) > propsfile 
  2. Create an Inject environment variables build step and set "Properties File Path" to propsfile.



回答2:

The simplest way

You can use EnvInject plugin to injects environment variables at build startup. For example:

How you know it's working



回答3:

In my case, I needed to add the JMETER_HOME environment variable to be available via my Ant build scripts across all projects on my Jenkins server (Linux), in a way that would not interfere with my local build environment (Windows and Mac) in the build.xml script. Setting the environment variable via Manage Jenkins - Configure System - Global properties was the easiest and least intrusive way to accomplish this. No plug-ins are necessary.


The environment variable is then available in Ant via:

This can be verified to works by adding:

Which produces:

JMeter Home: ~/.jmeter



回答4:

EnvInject Plugin aka (Environment Injector Plugin) gives you several options to set environment variables from Jenkins configuration.

By selecting Inject environment variables to the build process you will get:

  • Properties File Path
  • Properties Content
  • Script File Path

  • Script Content

  • and finally Evaluated Groovy script.


Evaluated Groovy script gives you possibility to set environment variable based on result of executed command:

  • with execute method:
    return [HOSTNAME_SHELL: 'hostname'.execute().text,          DATE_SHELL: 'date'.execute().text,         ECHO_SHELL: 'echo hello world!'.execute().text     ] 
  • or with explicit Groovy code:
    return [HOSTNAME_GROOVY: java.net.InetAddress.getLocalHost().getHostName(),         DATE_GROOVY: new Date()     ]  

(More details about each method could be found in build-in help (?))


Unfortunately you can't do the same from Script Content as it states:

Execute a script file aimed at setting an environment such as creating folders, copying files, and so on. Give the script file content. You can use the above properties variables. However, adding or overriding environment variables in the script doesn't have any impacts in the build job.



回答5:

There is Build Env Propagator Plugin which lets you add new build environment variables, e.g.

Any successive Propagate build environment variables step will override previously defined environment variable values.



回答6:

You can use Environment Injector Plugin to set environment variables in Jenkins at job and node levels. Below I will show how to do it at job level.

  1. From the Jenkins web interface, go to Manage Jenkins > Manage Plugins and install the plugin.

  1. Go to your job Configure screen
  2. Find Add build step in Build section and select Inject environment variables
  3. Set the desired environment variable as VARIABLE_NAME=VALUE pattern. In my case, I changed value of USERPROFILE variable

If you need to define a new environment variable depending on some conditions (e.g. job parameters) you can refer to this answer.



回答7:

Normally you can configure Environment variables in Global properties in Configure System.

However for dynamic variables with shell substitution, you may want to create a script file in Jenkins HOME dir and execute it during the build. The SSH access is required. For example.

  1. Log-in as Jenkins: sudo su - jenkins
  2. Create a shell script, e.g.:

    echo 'export VM_NAME="$JOB_NAME"' > ~/load_env.sh chmod 750 ~/load_env.sh 
  3. In Jenkins Build (Execute shell), invoke the script and its variables before anything else, e.g.

    source ~/load_env.sh 


回答8:

For some reason sudo su - jenkins does not log me to jenkins user, I ended up using different approach.

I was successful setting the global env variables using using jenkins config.xml at /var/lib/jenkins/config.xml (installed in Linux/ RHEL) - without using external plugins.

I simply had to stop jenkins add then add globalNodeProperties, and then restart.

Example, I'm defining variables APPLICATION_ENVIRONMENT and SPRING_PROFILES_ACTIVE to continious_integration below,

2APPLICATION_ENVIRONMENTcontinious_integrationSPRING_PROFILES_ACTIVEcontinious_integration


回答9:

You can try something like this

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


回答10:

Try Environment Script Plugin (GitHub) which is very similar to EnvInject. It allows you to run a script before the build (after SCM checkout) that generates environment variables for it. E.g.

and in your script, you can print e.g. FOO=bar to the standard output to set that variable.

Example to append to an existing PATH-style variable:

echo PATH+unique_identifier=/usr/local/bin 

So you're free to do whatever you need in the script - either cat a file, or run a script in some other language from your project's source tree, etc.



易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!