我希望能够做到这样的事情:
AOEU=$(echo aoeu)
让詹金斯设置AOEU=aoeu
。
Jenkins中的 Environment Variables 部分不会这样做。相反,它设置AOEU='$(echo aoeu)'
。
如何让Jenkins评估shell命令并将输出分配给环境变量?
最终,我希望能够将作业的执行者分配给可以传递到其他脚本或由其他脚本使用的环境变量。
答案 0 :(得分:189)
这可以通过EnvInject plugin以下列方式完成:
创建一个运行的“执行shell”构建步骤:
echo AOEU=$(echo aoeu) > propsfile
创建注入环境变量构建步骤,并将“属性文件路径”设置为propsfile
。
注意:此插件(大部分)与Pipeline插件不兼容。
答案 1 :(得分:92)
答案 2 :(得分:45)
在我的情况下,我需要在我的Jenkins服务器(Linux)上的所有项目中添加JMETER_HOME
环境变量以通过我的Ant构建脚本提供,这种方式不会干扰我的本地构建环境({1}}脚本中的(Windows和Mac)。通过管理Jenkins - 配置系统 - 全局属性设置环境变量是实现此目的的最简单且最不具侵入性的方法。不需要任何插件。
然后可以在Ant中使用环境变量:
build.xml
这可以通过添加以下内容来验证:
<property environment="env" />
<property name="jmeter.home" value="${env.JMETER_HOME}" />
产生:
JMeter主页:〜/ .jmeter
答案 3 :(得分:12)
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
做同样的事情:
执行旨在设置创建等环境的脚本文件 文件夹,复制文件等。提供脚本文件内容。您 可以使用上面的属性变量。 但是,添加或覆盖 脚本中的环境变量没有任何影响 建立工作。
答案 4 :(得分:12)
您可以尝试这样的事情
stages {
stage('Build') {
environment {
AOEU= sh (returnStdout: true, script: 'echo aoeu').trim()
}
steps {
sh 'env'
sh 'echo $AOEU'
}
}
}
答案 5 :(得分:9)
答案 6 :(得分:9)
您可以使用Environment Injector Plugin在作业和节点级别设置Jenkins中的环境变量。下面我将展示如何在工作级别设置它们。
Manage Jenkins > Manage Plugins
并安装插件。Configure
屏幕Add build step
部分中找到 Build
,然后选择 Inject environment variables
如果您需要根据某些条件(例如作业参数)定义新的环境变量,可以参考此answer。
答案 7 :(得分:7)
通常,您可以在配置系统中的全局属性中配置环境变量。
但是对于具有shell替换的动态变量,您可能希望在Jenkins HOME目录中创建脚本文件并在构建期间执行它。 SSH访问是必需的。例如。
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
在Jenkins Build( Execute shell )中,先调用脚本及其变量,例如
。source ~/load_env.sh
答案 8 :(得分:4)
尝试与Environment Script Plugin非常相似的GitHub(EnvInject)。它允许您在构建之前(SCM结帐之后)运行脚本,为其生成环境变量。 E.g。
并在您的脚本中,您可以打印例如FOO=bar
到标准输出以设置该变量。
附加到现有PATH
- 样式变量的示例:
echo PATH+unique_identifier=/usr/local/bin
因此,您可以自由地在脚本中执行任何操作 - cat
文件,或者从项目的源代码树中运行其他语言的脚本等。
答案 9 :(得分:2)
就我而言,我已经使用以下选项配置了环境变量,并且它可以正常工作-
Manage Jenkins -> Configure System -> Global Properties -> Environment Variables -> Add
答案 10 :(得分:0)
由于某些原因sudo su - jenkins
未将我登录到jenkins
user,我最终采用了不同的方法。
我在config.xml
(安装在Linux / RHEL中)使用jenkins /var/lib/jenkins/config.xml
成功设置全局env变量 - 不使用外部插件。
我只需要停止jenkins添加然后添加globalNodeProperties
,然后重新启动。
示例,我将变量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>
答案 11 :(得分:0)
这是存储环境变量并访问它的代码段。
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)对其进行解析。
答案 12 :(得分:0)
您可以使用以下两种方式之一:
管理Jenkins->配置系统->全局属性->环境变量->添加
答案 13 :(得分:-1)
我们使用常规的工作文件:
description('')
steps {
environmentVariables {
envs(PUPPETEER_SKIP_CHROMIUM_DOWNLOAD: true)
}
}