Jenkins中的变量


变量的来源

  • Jenkins内置的环境变量

    • 构建任务相关的变量

    • 构建状态相关的变量

  • 插件提供的环境变量

  • pipeline中environment指令定义的变量

  • 脚本自定义的变量

变量的引用

  • $变量名

  • ${变量名}

  • ${env.变量名}

变量的处理

  • ${变量名[0..7]}

  • 变量名.take(8)

  • ${变量名.replace(' and counting', '')}

 

流水线中变量定义引用


变量的类型:两种类型的变量。

  1. Jenkins系统内置变量 (全局变量)
  2. 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内置的全局变量清单。

在调试的时候,需要获取项目的信息,这个时候在全局变量参考里面就能找到可以使用的变量

image.png

比如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         //持续时间

image.png

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐