如何在Jenkins中设置环境variables?
我希望能够做到这样的事情:
AOEU=$(echo aoeu)
Jenkins设置了AOEU=aoeu
。
Jenkins中的环境variables部分没有这样做,相反,它设置AOEU='$(echo aoeu)'
。 我怎样才能让jenkins评估一个shell命令,并将输出分配给一个环境variables。
最终,我希望能够将作业的执行程序分配给可以传入或由其他脚本使用的环境variables。
这可以通过以下方式通过EnvInject插件完成:
-
创build一个“Execute shell”构build步骤,运行:
echo AOEU=$(echo aoeu) > propsfile
-
创build一个Inject环境variables构build步骤,并将“Properties File Path”设置为
propsfile
。
最简单的方法
您可以使用EnvInject插件在构build启动时注入环境variables。 例如:
你如何知道它的工作
在我的情况下,我需要添加JMETER_HOME
环境variables,以便通过我的Ant构build脚本在我的Jenkins服务器(Linux)上的所有项目中以不会干扰本地构build环境(Windows和Mac)的方式build.xml
脚本。 通过pipe理Jenkins设置环境variables– configuration系统 – 全局属性是实现这一点最简单和干扰最小的方式。 没有插件是必要的。
这个环境variables在Ant中是可用的:
<property environment="env" /> <property name="jmeter.home" value="${env.JMETER_HOME}" />
这可以通过添加:
<echo message="JMeter Home: ${jmeter.home}"/>
其中产生:
JMeter主页:〜/ .jmeter
EnvInject插件 aka( 环境注入器插件 )为您提供了几个选项来设置Jenkinsconfiguration中的环境variables。
通过selectInject environment variables to the build process
您将获得:
-
Properties File Path
-
Properties Content
-
Script File Path
-
Script Content
-
最后
Evaluated Groovy script
。
Evaluated Groovy script
使您可以根据执行的命令的结果设置环境variables :
- 用
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文件夹,复制文件等。 给脚本文件内容。 你可以使用上面的属性variables。 但是,在脚本中添加或覆盖环境variables不会对构build作业产生任何影响 。
您可以尝试环境脚本插件 ( GitHub ),它非常类似于EnvInject 。 它允许您在构build之前(在SCM结算之后)运行一个脚本,为脚本生成环境variables。 例如
在你的脚本中,你可以打印例如FOO=bar
到标准输出来设置这个variables。
附加到现有PATH
风格variables的示例:
echo PATH+unique_identifier=/usr/local/bin
所以,你可以自由地在脚本中做任何你需要的东西 – 要么是一个文件,要么是从项目的源代码树中运行一些其他语言的脚本等等。
另一种select是Build Env Propagator Plugin ,它可以让你添加新的构build环境variables,例如
任何连续的Propagate构build环境variables步骤都将覆盖以前定义的环境variables值。
通常情况下,您可以在configuration系统的 全局属性中configuration 环境variables 。
但是,对于使用shellreplace的dynamicvariables,您可能希望在Jenkins HOME dir中创build一个脚本文件,并在构build期间执行它。 SSH访问是必需的。 例如。
- 以Jenkins身份login:
sudo su - jenkins
-
创build一个shell脚本,例如:
echo 'export VM_NAME="$JOB_NAME"' > ~/load_env.sh chmod 750 ~/load_env.sh
-
在Jenkins Build( Execute shell )中,调用脚本及其variables之前,例如
source ~/load_env.sh
出于某种原因, sudo su - jenkins
不会将我login到jenkins
用户 ,我最终使用了不同的方法。
我成功地在/var/lib/jenkins/config.xml
(安装在Linux / RHEL中)使用jenkins config.xml
来设置全局envvariables,而不使用外部插件。
我只需要停止jenkins添加然后添加globalNodeProperties
,然后重新启动。
例如,我将variablesAPPLICATION_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>
你可以尝试这样的事情
stages { stage('Build') { environment { AOEU= sh (returnStdout: true, script: 'echo aoeu').trim() } steps { sh 'env' sh 'echo $AOEU' } } }