我希望能够做到以下几点:

AOEU=$(echo aoeu)

并让Jenkins设置AOEU= AOEU。

Jenkins中的环境变量部分不会这样做。相反,它设置了AOEU='$(echo AOEU)'。

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

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


当前回答

在我的例子中,我需要添加JMETER_HOME环境变量,使其可以通过我的Ant构建脚本在我的Jenkins服务器(Linux)上的所有项目中使用,并且不会干扰build.xml脚本中的本地构建环境(Windows和Mac)。通过Manage Jenkins - Configure System - Global属性来设置环境变量是最简单和侵入性最小的方法。不需要插件。


环境变量可以通过以下方式在Ant中使用:

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

这可以通过添加:

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

生产:

JMeter Home: ~/.jmeter

其他回答

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

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)来解析它。

有一个Build Env传播器插件,它可以让你添加新的构建环境变量,例如:

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

你可以尝试这样做

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

扩展@JSixface的答案:

若要在声明式管道的所有阶段内全局定义环境变量,以便进行访问,可以在管道块中添加环境部分。

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

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

创建一个“Execute shell”构建步骤,运行: echo AOEU=$(echo AOEU) >概要文件 创建一个注入环境变量构建步骤,并将“属性文件路径”设置为propsfile。

注意:这个插件(大部分)与Pipeline插件不兼容。