首页 文章

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

提问于
浏览
175

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

AOEU=$(echo aoeu)

并让詹金斯设置 AOEU=aoeu .

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

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

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

12 回答

  • 1

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

    • 创建一个运行的“执行shell”构建步骤:
    echo AOEU=$(echo aoeu) > propsfile
    
    • 创建Inject环境变量构建步骤并将"Properties File Path"设置为 propsfile .

    Note :此插件(大部分)与Pipeline插件不兼容 .

  • 0

    最简单的方法

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

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

    你怎么知道它正在发挥作用

    EnvInject - Variables injected successfully

  • 7

    在我的情况下,我需要添加 JMETER_HOME 环境变量,以便在我的Jenkins服务器(Linux)上的所有项目中通过我的Ant构建脚本提供,其方式不会干扰我的本地构建环境(Windows和Mac) build.xml 脚本 . 通过 Manage Jenkins - Configure System - Global properties 设置环境变量是实现此目的的最简单且最不具侵入性的方法 . 不需要插件 .

    Manage Jenkins Global Properties


    然后,Ant中的环境变量可用:

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

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

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

    哪个产生:

    JMeter Home:〜/ .jmeter

  • 7

    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 为您提供 set environment variable based on result of executed command 的可能性:

    • with 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 做同样的事情:

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

  • 39

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

    Jenkins Build - Propagate build environment variables

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

  • 177

    你可以尝试这样的事情

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

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

    • 在Jenkins Web界面中,转到 Manage Jenkins > Manage Plugins 并安装插件 .

    Environment Injector Plugin

    • 转到你的工作 Configure 屏幕

    • Build 部分找到 Add build step 并选择 Inject environment variables

    • 将所需的环境变量设置为VARIABLE_NAME = VALUE模式 . 在我的例子中,我更改了USERPROFILE变量的值

    enter image description here

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

  • 85

    通常,您可以在Configure System中的Global属性中配置环境变量 .

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

    • 以Jenkins身份登录: sudo su - jenkinssudo su - jenkins -s /bin/bash

    • 创建一个shell脚本,例如:

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

    试试Environment Script PluginGitHub),这与EnvInject非常相似 . 它允许您在构建之前(SCM结帐之后)运行脚本,为其生成环境变量 . 例如 .

    Jenkins Build - Regular job - Build Environment

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

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

    echo PATH+unique_identifier=/usr/local/bin
    

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

  • 5

    出于某种原因 sudo su - jenkins 没有将我登录到 jenkins user,我最终使用了不同的方法 .

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

    我只需要停止jenkins添加然后添加 globalNodeProperties ,然后重启 .

    例如,我在下面定义变量 APPLICATION_ENVIRONMENTSPRING_PROFILES_ACTIVEcontinious_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>
    
  • 4

    我们使用groovy工作文件:

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

    Jenkin正在为此提供内置支持,使用它可以访问本地的 Value 变量作为全局环境变量 . 您可以通过以下4个简单步骤实现此目的 .

    Step-1

    enter image description here

    ............................
    rm -f <some_name>.properties
    touch <Some_name>.properties
    ............................
    #pass the variable name you want to access as an env variable
    echo variable_name1=$some_value1 >> <some_name>.properties
    echo variable_name2=$some_value2 >> <some_name>.properties
    ............................
    echo variable_name3=$some_value3 >> <some_name>.properties
    

    Step-2

    在“添加构建步骤" drop-down, select "注入环境变量”下

    enter image description here

    enter image description here

    Step:3

    在“属性文件路径”字段中输入先前创建的完全限定文件名( <some_name>.properties ) .

    enter image description here

    Step-4

    现在它可以作为Jenkins环境变量使用,您可以在Post-build-Action中根据需要使用它 . $variable_name1 与任何其他环境变量一样 .

    Here对此很好

相关问题