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

AOEU=$(echo aoeu)

并让Jenkins设置AOEU= AOEU。

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

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

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


当前回答

我们使用的Scripted Pipeline语法是这样的:

env.AEOU = sh label:'set env var',
                returnStdout: true,
               script : '''#!/bin/bash
                   echo "aeou"
               '''
sh label:'checkit',
 script : '''#!/bin/bash
    echo "${AEOU}"
 '''

注意,sh步骤的脚本参数使用了三单引号表示法。这确保了${AEOU}不会被Groovy插入,而是被bash shell插入。

其他回答

最简单的方法

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

你怎么知道它有用

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

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

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

例如,我定义变量APPLICATION_ENVIRONMENT和SPRING_PROFILES_ACTIVE到continuous_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>

EnvInject Plugin(环境注入器插件)提供了几个选项来设置Jenkins配置中的环境变量。

通过选择将环境变量注入构建过程,您将得到:

文件路径 属性内容 脚本路径 脚本内容 最后评估Groovy脚本。


Groovy脚本为您提供了基于执行命令的结果设置环境变量的可能性:

执行方法:

    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()
    ] 

(关于每个方法的更多细节可以在内置帮助中找到(?))


不幸的是,你不能从脚本内容做同样的事情,因为它声明:

执行一个脚本文件,目的是设置一个环境,如创建 文件夹,复制文件,等等。给出脚本文件内容。你 可以使用上面的属性变量。但是,添加或重写 脚本中的环境变量不会对 建立工作。

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

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

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

尝试环境脚本插件(GitHub),它非常类似于EnvInject。它允许您在构建之前(SCM签出之后)运行一个脚本,为它生成环境变量。如。

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

添加到现有path样式变量的示例:

echo PATH+unique_identifier=/usr/local/bin

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