Jenkins 流水线语法 03 全局变量
流水线中变量定义引用
变量的类型:两种类型的变量。
- Jenkins系统内置变量 (全局变量)
- Pipeline中定义变量(全局/局部变量)
Jenkins系统内置变量:
是Jenkins系统在安装部署后预先定义好的变量。这些变量可以通过Jenkins流水线语法页面看到具体有哪些。这些变量都是全局的可以使用"${env.变量名}引用。
Pipeline中的变量:
首先你要先理解pipeline可以用groovy语法来编写,而groovy是一门编程语言。所有的编程语言也都有各自的变量定义方式。 这就容易让大家产生疑惑的地方,pipeline中可以有很多种写法。
def name = "devops"
String name = "devops"
以上这两种写法是一样,def可以自动推导出变量类型,而String这种写法是精确这个变量是一个字符串类型的(string是强类型,定死了变量类型)。
如果你在Jenkins图形界面设置了参数化构建,那么这些参数也都变成了Jenkins全局变量,可以使用与Jenkins内置变量相同的引用方式。
如果在某个stage定义的变量默认是局部变量,在后续的stage中可能语法引用,所以如果需要引用最好定义为全局变量。
全局变量的定义方式:
env.name = "devops"
引用方式: "${env.name}"
总之变量是我们在编写Jenkins流水线是经常用到的。无处不在。如果你要定义全局的变量就用env.变量名的方式定义。 变量也不仅仅只有这几种写法,我建议如果想了解更多,可以多看下groovy这门需要的更多语法。
全局变量
这些是已经安装的Jenkins插件和Jenkins内置的全局变量清单。
在调试的时候,需要获取项目的信息,这个时候在全局变量参考里面就能找到可以使用的变量
比如env变量,比如我想获取(有些变量名字是拿不到的,因为没有使用分支管理)
这里打印项目的名称,注意这里两个echo是不一样的,一个是Jenkins里面的echo,一个是shell脚本里面的echo
shell脚本里面要传递变量就可以使用这个,sh "${variable}"
env
JOB_NAME
Name of the project of this build, such as "foo" or "foo/bar".
currentBuild
currentResult
typically SUCCESS, UNSTABLE, or FAILURE. Will never be null.
pipeline {
agent any
stages {
stage('getCode') {
steps {
sh "echo shell print variable ${env.JOB_NAME}"
echo "${env.JOB_NAME}"
echo "jenkins buid status ${currentBuild.currentResult}"
}
}
}
}
Started by user admin
Running in Durability level: MAX_SURVIVABILITY
[Pipeline] Start of Pipeline
[Pipeline] node
Running on Jenkins in /var/jenkins_home/workspace/pipeline-test
[Pipeline] {
[Pipeline] stage
[Pipeline] { (getCode)
[Pipeline] sh
+ echo shell print variable pipeline-test
shell print variable pipeline-test
[Pipeline] echo
pipeline-test
[Pipeline] echo
jenkins buid status SUCCESS
[Pipeline] }
[Pipeline] // stage
[Pipeline] }
[Pipeline] // node
[Pipeline] End of Pipeline
Finished: SUCCESS
变量要用双引号,如果使用单引号是打印不出来的
内置变量
BUILD_NUMBER //构建号
BUILD_ID //构建号
BUILD_DISPLAY_NAME //构建显示名称
JOB_NAME //项目名称
EXECUTOR_NUMBER //执行器数量
NODE_NAME //构建节点名称
WORKSPACE //工作目录
JENKINS_HOME //Jenkins home
JENKINS_URL //Jenkins地址
BUILD_URL //构建地址
JOB_URL //项目地址
println(env)
env.branchName = "develop"
env.commitID = "${UUID.randomUUID().toString()}"
env.commitID = "${env.commitID.split("-")[0]}"
currentBuild.displayName = "#${env.branchName}-${env.commitID}"
currentBuild.description = "Trigger by user jenkins \n branch: master"
pipeline {
agent { label "build"}
stages{
stage("test"){
steps{
script{
echo "${BUILD_NUMBER}"
echo "${BUILD_ID}"
//currentBuild.displayName = "#${env.branchName}-${env.commitID}"
//currentBuild.description = "Trigger by user jenkins \n branch: master"
echo "当前下载代码分支为: ${env.branchName}"
}
}
}
}
}
currentbuild变量
result currentResult //构建结果
displayName //构建名称 #111
description //构建描述
duration //持续时间
目录 返回
首页