如何使用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脚本实现的,如下

# 获取版本号的脚本@NonCPSString 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 测试构建步骤?

如何自定义jenkins环境变量

Jenkins可用环境变量以及使用方法

如何在jenkins构建时调用sbt环境变量

如何在 Jenkins/Hudson 中以编程方式设置环境变量?

如何在 Jenkins 中通过环境变量设置定期构建作业的时间表