如何使用Jenkins中的环境变量
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用Jenkins中的环境变量相关的知识,希望对你有一定的参考价值。
参考技术A 在使用Jenkins任务中,存在构建(Build)这一步骤,在该步骤中会涉及到使用Execute
Windows
batch
command
这样的命令,在输入框下方能看到See
the
list
of
available
environment
variables。那么,这些环境变量是做什么的呢?如何在batch
command中使用它们?
下面结合不同的目的,来慢慢的解析这些变量的用法。
1.
将构建的版本复制到目标文件夹中,构建者能够自定义的命名目标文件夹。
确保Jenkins安装了Parameterized
plugin,并给任务定义一个参数(parameter),如命名为
BRANCH_NAME
。在
Execute
Windows
batch
command
的输入框中,可以通过
%BRANCH_NAME%
来使用该参数。
如,
md
%BRANCH_NAME%
可以在该任务的workspace中查看到以BRANCH_NAME变量对应的值来命名的文件夹。
如果需要复制,可使用命令
xcopy
/s/i/y
C:\Jenkins
C:\test\%BRANCH_NAME%\
,将Jenkins目录下的文件复制到C:\test\%BRANCH_NAME%\目录下。
如何自定义jenkins环境变量
这篇文章主要介绍如何自定义jenkins的环境变量
前段时间在使用jenkins 的pipeline的时候遇到一个问题,有两个stage,其中stage1主要实现的功能是获取代码文件的版本信息,获取版本是使用了一段shell脚本实现的,如下
# 获取版本号的脚本
String extractLines(final String content) {
String myKeys = " "
content.eachLine { line ->
if(line =~ "server.version="){
echo "version = ${line}"
// myKeys << line
myKeys = "${line}"
myKeys =myKeys.replace("server.version=","")
// echo "version = myKeys"
return myKeys
}
}
return myKeys
最终把获取到的版本信息赋值给一个变量(例如version),然后结合一些指定值(例如时间戳BUILD_TIMESTAMP)拼接成docker镜像名称(例如docker_image= ${version}_${BUILD_TIMESTAMP}这种形式),
stage("获取版本号拼接镜像名") {
steps {
script {
checkout(拉取代码的流水线脚本)
final String content = readFile(file: "包含版本号的文件路径")
# 调用上面获取version的脚本
final String version = extractLines(content)
echo "version = ${version}"
docker_image="${myKeys}_${BUILD_TIMESTAMP}"
echo "docker_image = ${docker_image}"
}
}
}
stage2主要实现的是打包功能,这个打包的job需要用到stage1中拼接好的镜像名(即docker_image)。
测试了很多次发现只能将BUILD_TIMESTAMP值传到stage2,而version传递不过去,然后根据日志信息百度谷歌无果,后来仔细想了想,这种问题应该和jenkins中的变量定义方式或者作用域有关系。然后顺着这个思路继续往下走,最后成功解决上述问题。
先贴一下解决后的脚本,在docker_image变量前面加env,声明为环境变量,然后变量就可以顺利传递到stage2中使用了。
stage("获取版本号拼接镜像名") {
steps {
script {
checkout(拉取代码的流水线脚本)
final String content = readFile(file: "包含版本号的文件路径")
# 调用上面获取version的脚本
final String version = extractLines(content)
echo "version = ${version}"
env.docker_image="${myKeys}_${BUILD_TIMESTAMP}"
echo "docker_image = ${docker_image}"
}
}
}
再总结一下解决问题过程中了解到的jenkins自定义环境变量的三种方式
# 第一种是声明式
environment {
key = value
}
# 第二种是脚本式
env.key=value
# 第三种是内置函数式
withEnv(["key=value"]){}
我是用的是第二种脚本式解决的
另外,三种自定义环境变量的方式有三条规则需要注意
1.withEnv(["WITH_ENV_VAR=Come On"]) {} 内置函数的这种写法,可以重写任意环境变量
2.定义在 environment {} 的环境变量不能被脚本式定义的环境变量(env.key="value")重写
3.脚本式环境变量只能重写脚本式环境变量
总结一下:遇到问题后,找到根本问题往往会加速问题的解决。
以上是关于如何使用Jenkins中的环境变量的主要内容,如果未能解决你的问题,请参考以下文章
如何将环境变量传递给 Jenkins 中的 sbt 测试构建步骤?