我希望能够执行以下操作:
AOEU=$(echo aoeu)
并安排詹金斯AOEU=aoeu
。
Jenkins中的“ 环境变量”部分不这样做。而是设置了AOEU='$(echo aoeu)'
。
如何让Jenkins评估Shell命令并将输出分配给环境变量?
最终,我希望能够将作业的执行者分配给可以传递给其他脚本或由其他脚本使用的环境变量。
我希望能够执行以下操作:
AOEU=$(echo aoeu)
并安排詹金斯AOEU=aoeu
。
Jenkins中的“ 环境变量”部分不这样做。而是设置了AOEU='$(echo aoeu)'
。
如何让Jenkins评估Shell命令并将输出分配给环境变量?
最终,我希望能够将作业的执行者分配给可以传递给其他脚本或由其他脚本使用的环境变量。
Answers:
可以通过以下方式通过EnvInject插件完成此操作:
创建一个运行的“执行外壳”构建步骤:
echo AOEU=$(echo aoeu) > propsfile
创建一个“ 注入”环境变量构建步骤,并将“属性文件路径”设置为propsfile
。
注意:此插件(大多数)与Pipeline插件不兼容。
sh
步入正轨即可。
foo
将在该特定的shell动作中导出,但不会在其他动作中导出。
key=value
。在我的用例中,我完全生成了该行: cat app/build.gradle | grep "def majorVersion" | python -c 'import sys,re,os; print("VERSION_NUMBER="+re.findall(r"[\d+\.]+", sys.stdin.read())[0]+os.environ["BUILD_NUMBER"])'
BUILD_DATE=date "+%Y-%m-%d-%H_%M_%S"
和BUILD_DATE=$(date "+%Y-%m-%d-%H_%M_%S")
并BUILD_DATE=`date "+%Y-%m-%d-%H_%M_%S"`
没有对我的工作
就我而言,我需要添加JMETER_HOME
环境变量,以便在我的Jenkins服务器(Linux)上的所有项目中都可以通过我的Ant构建脚本使用该环境变量,其方式应不会干扰build.xml
脚本中的本地构建环境(Windows和Mac)。通过Manage Jenkins-配置系统-全局属性设置环境变量是实现此目的的最简单,最少侵入的方法。无需插件。
然后可以通过以下方式在Ant中使用环境变量:
<property environment="env" />
<property name="jmeter.home" value="${env.JMETER_HOME}" />
可以通过添加以下内容来验证其是否有效:
<echo message="JMeter Home: ${jmeter.home}"/>
产生:
JMeter主页:〜/ .jmeter
git
/path/to/my/git
和PATH+git
/path/to/my/git
。但是,如果尝试git
从a 访问,则会Jenkins pipeline script
得到:/bin/sh: git: command not found
。
您可以使用Environment Injector插件在作业和节点级别的Jenkins中设置环境变量。下面,我将显示如何在工作级别设置它们。
Manage Jenkins > Manage Plugins
并安装插件。Configure
屏幕Add build step
在Build
部分中查找并选择Inject environment variables
如果您需要根据某些条件(例如,作业参数)定义新的环境变量,则可以参考此答案。
您可以尝试这样的事情
stages {
stage('Build') {
environment {
AOEU= sh (returnStdout: true, script: 'echo aoeu').trim()
}
steps {
sh 'env'
sh 'echo $AOEU'
}
}
}
Jenkinsfile
适合用于管道(而不是工作)!太好了,谢谢!
EnvInject插件又名(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
状态中做到这一点:
执行旨在设置环境的脚本文件,例如创建文件夹,复制文件等。提供脚本文件的内容。您可以使用以上属性变量。 但是,在脚本中添加或覆盖环境变量不会对构建作业产生任何影响。
通常情况下,你可以配置环境变量在全球性的配置系统。
但是,对于使用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
sudo su - jenkins
,echo $USER
还给我root
。
su -l
参数来执行此操作,否则请提出另一个问题。
您可以使用以下两种方式之一:
管理詹金斯->配置系统->全局属性->环境变量->添加
由于某种原因,我sudo su - jenkins
没有登录到jenkins
用户,所以我最终使用了不同的方法。
我成功了使用设置使用詹金斯全球ENV变量config.xml
在/var/lib/jenkins/config.xml
(安装在Linux的/ RHEL) -无需使用外部插件。
我只是不得不停止jenkins add,然后添加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>
我们使用常规的作业文件:
description('')
steps {
environmentVariables {
envs(PUPPETEER_SKIP_CHROMIUM_DOWNLOAD: true)
}
}