我希望能够做到这样的事情:
AOEU=$(echo aoeu)
并让詹金斯设置 AOEU=aoeu .
AOEU=aoeu
Jenkins中的Environment Variables部分不会这样做 . 相反,它设置 AOEU='$(echo aoeu)' .
AOEU='$(echo aoeu)'
如何让Jenkins评估shell命令并将输出分配给环境变量?
最终,我希望能够将作业的执行程序分配给可以传递到其他脚本或由其他脚本使用的环境变量 .
这可以通过EnvInject plugin以下列方式完成:
echo AOEU=$(echo aoeu) > propsfile
propsfile
Note :此插件(大部分)与Pipeline插件不兼容 .
您可以使用EnvInject plugin在构建启动时注入环境变量 . 例如:
在我的情况下,我需要添加 JMETER_HOME 环境变量,以便在我的Jenkins服务器(Linux)上的所有项目中通过我的Ant构建脚本提供,其方式不会干扰我的本地构建环境(Windows和Mac) build.xml 脚本 . 通过 Manage Jenkins - Configure System - Global properties 设置环境变量是实现此目的的最简单且最不具侵入性的方法 . 不需要插件 .
JMETER_HOME
build.xml
然后,Ant中的环境变量可用:
<property environment="env" /> <property name="jmeter.home" value="${env.JMETER_HOME}" />
这可以通过添加以下内容来验证:
<echo message="JMeter Home: ${jmeter.home}"/>
哪个产生:
JMeter Home:〜/ .jmeter
EnvInject Plugin aka(Environment Injector Plugin)为您提供了几个从Jenkins配置中设置环境变量的选项 .
通过选择 Inject environment variables to the build process ,您将获得:
Inject environment variables to the build process
Properties File Path
Properties Content
Script File Path
Script Content
,最后 Evaluated Groovy script .
Evaluated Groovy script
Evaluated Groovy script 为您提供 set environment variable based on result of executed command 的可能性:
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 做同样的事情:
执行旨在设置环境(如创建文件夹,复制文件等)的脚本文件 . 提供脚本文件内容 . 您可以使用上面的属性变量 . 但是,在脚本中添加或覆盖环境变量对构建作业没有任何影响 .
有Build Env Propagator Plugin允许您添加新的构建环境变量,例如
任何连续的Propagate构建环境变量步骤都将覆盖先前定义的环境变量值 .
你可以尝试这样的事情
stages { stage('Build') { environment { AOEU= sh (returnStdout: true, script: 'echo aoeu').trim() } steps { sh 'env' sh 'echo $AOEU' } } }
您可以使用Environment Injector Plugin在作业和节点级别的Jenkins中设置环境变量 . 下面我将展示如何在工作级别执行此操作 .
转到你的工作 Configure 屏幕
在 Build 部分找到 Add build step 并选择 Inject environment variables
将所需的环境变量设置为VARIABLE_NAME = VALUE模式 . 在我的例子中,我更改了USERPROFILE变量的值
如果需要根据某些条件(例如作业参数)定义新的环境变量,可以参考此answer .
通常,您可以在Configure System中的Global属性中配置环境变量 .
但是对于具有shell替换的动态变量,您可能希望在Jenkins HOME目录中创建脚本文件并在构建期间执行它 . SSH访问是必需的 . 例如 .
以Jenkins身份登录: sudo su - jenkins 或 sudo su - jenkins -s /bin/bash
sudo su - jenkins
sudo 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
source ~/load_env.sh
试试Environment Script Plugin(GitHub),这与EnvInject非常相似 . 它允许您在构建之前(SCM结帐之后)运行脚本,为其生成环境变量 . 例如 .
在您的脚本中,您可以打印例如 FOO=bar 到标准输出以设置该变量 .
FOO=bar
附加到现有 PATH -style变量的示例:
PATH
echo PATH+unique_identifier=/usr/local/bin
因此,您可以自由地在脚本中执行任何操作 - 或者 cat 文件,或者从项目的源代码树中运行其他语言的脚本等 .
cat
出于某种原因 sudo su - jenkins 没有将我登录到 jenkins user,我最终使用了不同的方法 .
jenkins
我使用jenkins config.xml 在 /var/lib/jenkins/config.xml (安装在Linux / RHEL中)成功设置全局env变量 - 不使用外部插件 .
config.xml
/var/lib/jenkins/config.xml
我只需要停止jenkins添加然后添加 globalNodeProperties ,然后重启 .
globalNodeProperties
例如,我在下面定义变量 APPLICATION_ENVIRONMENT 和 SPRING_PROFILES_ACTIVE 到 continious_integration ,
APPLICATION_ENVIRONMENT
SPRING_PROFILES_ACTIVE
continious_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>
我们使用groovy工作文件:
description('') steps { environmentVariables { envs(PUPPETEER_SKIP_CHROMIUM_DOWNLOAD: true) } }
Jenkin正在为此提供内置支持,使用它可以访问本地的 Value 变量作为全局环境变量 . 您可以通过以下4个简单步骤实现此目的 .
Step-1
............................ 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 "注入环境变量”下
Step:3
在“属性文件路径”字段中输入先前创建的完全限定文件名( <some_name>.properties ) .
<some_name>.properties
Step-4
现在它可以作为Jenkins环境变量使用,您可以在Post-build-Action中根据需要使用它 . $variable_name1 与任何其他环境变量一样 .
Here对此很好
12 回答
这可以通过EnvInject plugin以下列方式完成:
propsfile
.Note :此插件(大部分)与Pipeline插件不兼容 .
最简单的方法
您可以使用EnvInject plugin在构建启动时注入环境变量 . 例如:
你怎么知道它正在发挥作用
在我的情况下,我需要添加
JMETER_HOME
环境变量,以便在我的Jenkins服务器(Linux)上的所有项目中通过我的Ant构建脚本提供,其方式不会干扰我的本地构建环境(Windows和Mac)build.xml
脚本 . 通过 Manage Jenkins - Configure System - Global properties 设置环境变量是实现此目的的最简单且最不具侵入性的方法 . 不需要插件 .然后,Ant中的环境变量可用:
这可以通过添加以下内容来验证:
哪个产生:
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 的可能性:execute
方法:Groovy
代码:(有关每种方法的更多详细信息,请参阅内置帮助(?))
不幸的是,你不能从
Script Content
做同样的事情:有Build Env Propagator Plugin允许您添加新的构建环境变量,例如
你可以尝试这样的事情
您可以使用Environment Injector Plugin在作业和节点级别的Jenkins中设置环境变量 . 下面我将展示如何在工作级别执行此操作 .
转到你的工作 Configure 屏幕
在 Build 部分找到 Add build step 并选择 Inject environment variables
将所需的环境变量设置为VARIABLE_NAME = VALUE模式 . 在我的例子中,我更改了USERPROFILE变量的值
如果需要根据某些条件(例如作业参数)定义新的环境变量,可以参考此answer .
通常,您可以在Configure System中的Global属性中配置环境变量 .
但是对于具有shell替换的动态变量,您可能希望在Jenkins HOME目录中创建脚本文件并在构建期间执行它 . SSH访问是必需的 . 例如 .
以Jenkins身份登录:
sudo su - jenkins
或sudo su - jenkins -s /bin/bash
创建一个shell脚本,例如:
试试Environment Script Plugin(GitHub),这与EnvInject非常相似 . 它允许您在构建之前(SCM结帐之后)运行脚本,为其生成环境变量 . 例如 .
在您的脚本中,您可以打印例如
FOO=bar
到标准输出以设置该变量 .附加到现有
PATH
-style变量的示例:因此,您可以自由地在脚本中执行任何操作 - 或者
cat
文件,或者从项目的源代码树中运行其他语言的脚本等 .出于某种原因
sudo su - jenkins
没有将我登录到jenkins
user,我最终使用了不同的方法 .我使用jenkins
config.xml
在/var/lib/jenkins/config.xml
(安装在Linux / RHEL中)成功设置全局env变量 - 不使用外部插件 .我只需要停止jenkins添加然后添加
globalNodeProperties
,然后重启 .例如,我在下面定义变量
APPLICATION_ENVIRONMENT
和SPRING_PROFILES_ACTIVE
到continious_integration
,我们使用groovy工作文件:
Jenkin正在为此提供内置支持,使用它可以访问本地的 Value 变量作为全局环境变量 . 您可以通过以下4个简单步骤实现此目的 .
Step-1
Step-2
在“添加构建步骤" drop-down, select "注入环境变量”下
Step:3
在“属性文件路径”字段中输入先前创建的完全限定文件名(
<some_name>.properties
) .Step-4
现在它可以作为Jenkins环境变量使用,您可以在Post-build-Action中根据需要使用它 . $variable_name1 与任何其他环境变量一样 .
Here对此很好