如何在Jenkins中设置环境变量?

时间:2012-05-16 19:21:49

标签: jenkins environment-variables

我希望能够做到这样的事情:

AOEU=$(echo aoeu)

让詹金斯设置AOEU=aoeu

Jenkins中的 Environment Variables 部分不会这样做。相反,它设置AOEU='$(echo aoeu)'

如何让Jenkins评估shell命令并将输出分配给环境变量?

最终,我希望能够将作业的执行者分配给可以传递到其他脚本或由其他脚本使用的环境变量。

14 个答案:

答案 0 :(得分:189)

这可以通过EnvInject plugin以下列方式完成:

  1. 创建一个运行的“执行shell”构建步骤:

    echo AOEU=$(echo aoeu) > propsfile
    
  2. 创建注入环境变量构建步骤,并将“属性文件路径”设置为propsfile

  3. 注意:此插件(大部分)与Pipeline插件不兼容。

答案 1 :(得分:92)

最简单的方法

您可以使用EnvInject plugin在构建启动时注入环境变量。例如:

Add key=value (bash OK!) under 'Build Environment'->'Inject environment variables to the build process' -> 'Properties Content'

你怎么知道它正在运作

EnvInject - Variables injected successfully

答案 2 :(得分:45)

在我的情况下,我需要在我的Jenkins服务器(Linux)上的所有项目中添加JMETER_HOME环境变量以通过我的Ant构建脚本提供,这种方式不会干扰我的本地构建环境({1}}脚本中的(Windows和Mac)。通过管理Jenkins - 配置系统 - 全局属性设置环境变量是实现此目的的最简单且最不具侵入性的方法。不需要任何插件。

Manage Jenkins Global Properties

然后可以在Ant中使用环境变量:

build.xml

这可以通过添加以下内容来验证:

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

产生:

  

JMeter主页:〜/ .jmeter

答案 3 :(得分:12)

EnvInject Plugin aka( Environment Injector Plugin )为您提供了几个从Jenkins配置中设置环境变量的选项。

选择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做同样的事情:

  

执行旨在设置创建等环境的脚本文件   文件夹,复制文件等。提供脚本文件内容。您   可以使用上面的属性变量。 但是,添加或覆盖   脚本中的环境变量没有任何影响   建立工作

答案 4 :(得分:12)

您可以尝试这样的事情

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

答案 5 :(得分:9)

Build Env Propagator Plugin允许您添加新的构建环境变量,例如

Jenkins Build - Propagate build environment variables

  

任何连续的Propagate构建环境变量步骤都将覆盖先前定义的环境变量值。

答案 6 :(得分:9)

您可以使用Environment Injector Plugin在作业和节点级别设置Jenkins中的环境变量。下面我将展示如何在工作级别设置它们。

  1. 在Jenkins网络界面中,转到 Manage Jenkins > Manage Plugins 并安装插件。
  2. Environment Injector Plugin

    1. 转到您的工作 Configure 屏幕
    2. Add build step 部分中找到 Build ,然后选择 Inject environment variables
    3. 将所需的环境变量设置为VARIABLE_NAME = VALUE模式。就我而言,我改变了USERPROFILE变量的值
    4. enter image description here

      如果您需要根据某些条件(例如作业参数)定义新的环境变量,可以参考此answer

答案 7 :(得分:7)

通常,您可以在配置系统中的全局属性中配置环境变量

但是对于具有shell替换的动态变量,您可能希望在Jenkins HOME目录中创建脚本文件并在构建期间执行它。 SSH访问是必需的。例如。

  1. 以Jenkins身份登录:sudo su - jenkinssudo su - jenkins -s /bin/bash
  2. 创建一个shell脚本,例如:

    echo 'export VM_NAME="$JOB_NAME"' > ~/load_env.sh
    echo "export AOEU=$(echo aoeu)" >> ~/load_env.sh
    chmod 750 ~/load_env.sh
    
  3. 在Jenkins Build( Execute shell )中,先调用脚本及其变量,例如

    source ~/load_env.sh
    

答案 8 :(得分:4)

尝试与Environment Script Plugin非常相似的GitHubEnvInject)。它允许您在构建之前(SCM结帐之后)运行脚本,为其生成环境变量。 E.g。

Jenkins Build - Regular job - Build Environment

并在您的脚本中,您可以打印例如FOO=bar到标准输出以设置该变量。

附加到现有PATH - 样式变量的示例:

echo PATH+unique_identifier=/usr/local/bin

因此,您可以自由地在脚本中执行任何操作 - cat文件,或者从项目的源代码树中运行其他语言的脚本等。

答案 9 :(得分:2)

就我而言,我已经使用以下选项配置了环境变量,并且它可以正常工作-

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

答案 10 :(得分:0)

由于某些原因sudo su - jenkins未将我登录到jenkins user,我最终采用了不同的方法。

我在config.xml(安装在Linux / RHEL中)使用jenkins /var/lib/jenkins/config.xml成功设置全局env变量 - 不使用外部插件。

我只需要停止jenkins添加然后添加globalNodeProperties,然后重新启动。

示例,我将变量APPLICATION_ENVIRONMENTSPRING_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>

答案 11 :(得分:0)

  

这是存储环境变量并访问它的代码段。

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

注意:环境变量的值以字符串形式出现。如果要将其用作布尔值,则必须使用Boolean.parse(env.DISABLE_SQL)对其进行解析。

答案 12 :(得分:0)

您可以使用以下两种方式之一:

  1. 使用Env Inject Plugin创建环境变量。请遵循此用法以了解更多信息,https://github.com/jenkinsci/envinject-plugin
    1. 在下面导航并可以添加

管理Jenkins->配置系统->全局属性->环境变量->添加

enter image description here

答案 13 :(得分:-1)

我们使用常规的工作文件:

description('')
steps {
    environmentVariables {
        envs(PUPPETEER_SKIP_CHROMIUM_DOWNLOAD: true)
    }
}