我希望能够做到以下几点:
AOEU=$(echo aoeu)
并让Jenkins设置AOEU= AOEU。
Jenkins中的环境变量部分不会这样做。相反,它设置了AOEU='$(echo AOEU)'。
如何让Jenkins计算shell命令并将输出分配给环境变量?
最后,我希望能够将作业的执行程序分配给一个环境变量,该环境变量可以传递给其他脚本或由其他脚本使用。
我希望能够做到以下几点:
AOEU=$(echo aoeu)
并让Jenkins设置AOEU= AOEU。
Jenkins中的环境变量部分不会这样做。相反,它设置了AOEU='$(echo AOEU)'。
如何让Jenkins计算shell命令并将输出分配给环境变量?
最后,我希望能够将作业的执行程序分配给一个环境变量,该环境变量可以传递给其他脚本或由其他脚本使用。
当前回答
扩展@JSixface的答案:
若要在声明式管道的所有阶段内全局定义环境变量,以便进行访问,可以在管道块中添加环境部分。
pipeline {
agent {
node {
label 'myAgent'
}
}
environment {
AOEU = "${sh(returnStdout: true, script: 'echo aoeu').trim()}"
}
stages {
...
}
}
其他回答
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()
]
(关于每个方法的更多细节可以在内置帮助中找到(?))
不幸的是,你不能从脚本内容做同样的事情,因为它声明:
执行一个脚本文件,目的是设置一个环境,如创建 文件夹,复制文件,等等。给出脚本文件内容。你 可以使用上面的属性变量。但是,添加或重写 脚本中的环境变量不会对 建立工作。
你可以尝试这样做
stages {
stage('Build') {
environment {
AOEU= sh (returnStdout: true, script: 'echo aoeu').trim()
}
steps {
sh 'env'
sh 'echo $AOEU'
}
}
}
尝试环境脚本插件(GitHub),它非常类似于EnvInject。它允许您在构建之前(SCM签出之后)运行一个脚本,为它生成环境变量。如。
在你的脚本中,你可以输出例如FOO=bar到标准输出来设置该变量。
添加到现有path样式变量的示例:
echo PATH+unique_identifier=/usr/local/bin
因此,您可以自由地在脚本中做任何您需要做的事情—要么cat文件,要么从项目的源代码树中以其他语言运行脚本,等等。
你可以使用环境注入器插件在作业和节点级别设置Jenkins中的环境变量。以下是将它们设置为工作级别的步骤:
在Jenkins网页界面,进入Manage Jenkins > Manage Plugins并安装插件。
进入作业Configure界面 在“构建”部分中找到“添加构建步骤”并选择“注入环境变量” 将所需的环境变量设置为VARIABLE_NAME=VALUE模式。在我的例子中,我改变了USERPROFILE变量的值
如果你需要根据某些条件(例如作业参数)定义一个新的环境变量,那么你可以参考这个答案。
在我的例子中,我使用以下选项配置环境变量,它工作了-
Manage Jenkins -> Configure System -> Global Properties -> Environment Variables -> Add