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

Noe*_*Yap 207 continuous-integration environment-variables jenkins

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

AOEU=$(echo aoeu)
Run Code Online (Sandbox Code Playgroud)

詹金斯设定了AOEU=aoeu.

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

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

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

mal*_*cot 208

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

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

    echo AOEU=$(echo aoeu) > propsfile
    
    Run Code Online (Sandbox Code Playgroud)
  2. 创建一个Inject环境变量构建步骤并将"Properties File Path"设置为propsfile.

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

  • EnvInject不处理我上面给出的情况:[EnvInject] - 注入环境变量属性内容AOEU = $(echo aoeu)[EnvInject] - 成功注入变量.[EnvInject] - 取消设置未解析的'AOEU'变量. (4认同)
  • @fbmd我在Windows上运行它.你只需要确保路径上有"sh". (2认同)
  • 如果"执行shell"退出时出现错误,则EnvInject不起作用,因为构建不会进入注入部分. (2认同)
  • @Vitim.us,`foo` 将在特定的 shell 操作中导出,但不会在其他操作中导出。 (2认同)

ken*_*y_k 101

最简单的方法

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

在'Build Environment'下添加key = value(bash OK!) - >'将环境变量注入构建过程' - >'Properties Content'

你怎么知道它的工作原理

EnvInject  - 成功注入变量

  • 尝试根据shell命令的输出设置值. (5认同)
  • @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"])'` (2认同)

val*_*tis 47

在我的例子中,我需要JMETER_HOME在Jenkins服务器(Linux)上的所有项目中添加环境变量以通过我的Ant构建脚本提供,这种方式不会干扰build.xml脚本中的本地构建环境(Windows和Mac).通过Manage Jenkins设置环境变量- 配置系统 - 全局属性是实现此目的最简单,最不具侵入性的方法.不需要插件.

管理Jenkins全球房地产


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

<property environment="env" />
<property name="jmeter.home" value="${env.JMETER_HOME}" />
Run Code Online (Sandbox Code Playgroud)

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

<echo message="JMeter Home: ${jmeter.home}"/>
Run Code Online (Sandbox Code Playgroud)

哪个产生:

JMeter主页:〜/ .jmeter

  • 这是一项全球财产。它将影响 Jenkins 上的所有作业。假设我只是为了一份工作想要这个房产? (2认同)

nik*_*nik 19

就我而言,我使用以下选项配置了环境变量并且它有效-

Manage Jenkins -> Configure System -> Global Properties -> Environment Variables -> Add
Run Code Online (Sandbox Code Playgroud)


JSi*_*ace 15

你可以尝试这样的事情

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

  • 此格式适用于Jenkinsfile管道项目。您在此代码段中使用哪种工作类型? (2认同)
  • 如何将其设为全局变量,以便后续阶段可以引用“AOEU”? (2认同)

Aya*_*fov 14

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

  1. 从Jenkins Web界面,转到Manage Jenkins > Manage Plugins并安装插件.

环境注入器插件

  1. 转到您的工作Configure屏幕
  2. Add build stepBuild部分中查找并选择Inject environment variables
  3. 将所需的环境变量设置为VARIABLE_NAME = VALUE模式.在我的例子中,我更改了USERPROFILE变量的值

在此输入图像描述

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


luk*_*a5z 13

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
    ]
Run Code Online (Sandbox Code Playgroud)
  • 或使用显式Groovy代码:
    return [HOSTNAME_GROOVY: java.net.InetAddress.getLocalHost().getHostName(),
        DATE_GROOVY: new Date()
    ] 
Run Code Online (Sandbox Code Playgroud)

(有关每种方法的更多详细信息,请参阅内置帮助(?))


不幸的是,你不能这样Script Content说:

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


ken*_*orb 9

建立信封传播器插件,它可以让你添加新的编译环境变量,例如,

Jenkins Build  - 传播构建环境变量

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


ken*_*orb 7

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

但是对于具有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
    
    Run Code Online (Sandbox Code Playgroud)
  3. 在Jenkins Build(执行shell)中,先调用脚本及其变量,例如

    source ~/load_env.sh
    
    Run Code Online (Sandbox Code Playgroud)


小智 7

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

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

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


Wol*_*son 6

扩展@JSixface的答案:

全局定义环境变量以便从声明性管道的所有阶段内进行访问,您可以在块environment中添加该部分pipeline

pipeline {                                                                                               
  agent {                                                                                                
    node {                                                                                               
      label 'myAgent'                                                                                   
    }                                                                                                    
  }                                                                                                      
  environment {
    AOEU = "${sh(returnStdout: true, script: 'echo aoeu').trim()}"                
  }                                                                                                      
  stages {
    ...
  }
}                                                                                               
Run Code Online (Sandbox Code Playgroud)