257

我希望能够做类似的事情:

AOEU=$(echo aoeu)

并让詹金斯设置AOEU=aoeu

Jenkins 中的环境变量部分没有这样做。相反,它设置AOEU='$(echo aoeu)'.

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

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

4

15 回答 15

231

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

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

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

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

于 2012-05-16T20:28:09.473 回答
119

最简单的方法

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

在 'Build Environment'->'Inject environment variables to the build process' -> 'Properties Content' 下添加 key=value (bash OK!)

你怎么知道它在工作

EnvInject - 变量注入成功

于 2015-06-18T23:07:14.390 回答
66

就我而言,我需要JMETER_HOME在我的 Jenkins 服务器 (Linux) 上的所有项目中通过我的 Ant 构建脚本添加环境变量,这样不会干扰build.xml脚本中的本地构建环境(Windows 和 Mac) . 通过Manage Jenkins - Configure System - Global properties设置环境变量是完成此操作的最简单且侵入性最小的方法。不需要插件。

管理 Jenkins 全局属性


然后通过以下方式在 Ant 中提供环境变量:

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

这可以通过添加来验证是否有效:

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

产生:

JMeter 主页:~/.jmeter

于 2016-08-17T18:52:34.887 回答
28

在我的情况下,我使用以下选项配置环境变量并且它有效 -

Manage Jenkins -> Configure System -> Global Properties -> Environment Variables -> Add
于 2019-02-21T13:04:54.587 回答
23

你可以试试这样的

stages {
        stage('Build') {
            environment { 
                    AOEU= sh (returnStdout: true, script: 'echo aoeu').trim()
                }
            steps {
                sh 'env'
                sh 'echo $AOEU'
            }
        }
    }
于 2017-07-24T20:37:38.030 回答
22

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

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

环境注入器插件

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

在此处输入图像描述

如果您需要根据某些条件(例如作业参数)定义一个新的环境变量,那么您可以参考这个答案

于 2017-11-21T10:32:03.387 回答
15

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像它所说的那样做同样的事情:

执行旨在设置环境的脚本文件,例如创建文件夹、复制文件等。给出脚本文件内容。您可以使用上述属性变量。 但是,在脚本中添加或覆盖环境变量不会对构建作业产生任何影响

于 2016-05-14T06:59:52.707 回答
13

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

Jenkins Build - 传播构建环境变量

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

于 2016-07-09T21:09:36.603 回答
7

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

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) 对其进行解析。

于 2019-05-31T15:49:08.210 回答
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
    
于 2016-07-09T22:07:09.383 回答
4

尝试与EnvInject非常相似的Environment Script Plugin ( GitHub ) 。它允许您在构建之前(在 SCM 检出之后)运行脚本,为其生成环境变量。例如

Jenkins Build - 常规工作 - 构建环境

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

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

echo PATH+unique_identifier=/usr/local/bin

因此,您可以自由地在脚本中做任何您需要的事情 - 无论cat是文件,还是从项目的源代码树中以其他语言运行脚本等。

于 2018-02-08T01:18:57.503 回答
2

扩展@JSixface 的答案:

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

pipeline {                                                                                               
  agent {                                                                                                
    node {                                                                                               
      label 'myAgent'                                                                                   
    }                                                                                                    
  }                                                                                                      
  environment {
    AOEU = "${sh(returnStdout: true, script: 'echo aoeu').trim()}"                
  }                                                                                                      
  stages {
    ...
  }
}                                                                                               
于 2021-10-19T12:30:26.690 回答
2

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

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

我只需要停止 jenkins add 然后 add 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>
于 2017-05-09T02:22:54.823 回答
1

您可以使用下列任一方式:

  1. 使用Env Inject Plugin创建环境变量。按照这里的用法和更多详细信息https://github.com/jenkinsci/envinject-plugin
    1. 在下方导航并可以添加

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

在此处输入图像描述

于 2019-12-08T09:28:31.310 回答
-3

我们使用 groovy 作业文件:

description('')
steps {
    environmentVariables {
        envs(PUPPETEER_SKIP_CHROMIUM_DOWNLOAD: true)
    }
}
于 2018-12-07T18:50:10.053 回答