一.环境变量
环境变量可以被看作是pipeline与Jenkins交互的媒介。比如,可以在pipeline中通过BUILD_NUMBER变量知道构建任务的当前构建次数。环境变量可以分为Jenkins内置变量和自定义变量。
在pipeline执行时,Jenkins通过一个名为env的全局变量,将Jenkins内置环境变量暴露出来。其使用方法有多种,示例如下:
pipeline {
agent any
stages {
stage('Example')
{
steps {
echo "Running ${env.BUILDNUMBER} on ${env.JENKINS_URL}"
# 方法1 推荐
echo "Running $env.BUILDNUMBER on $env.JENKINS_URL"
# 方法2
echo "Running ${BUILDNUMBER} on ${JENKINS_URL}"
# 方法3 不推荐,难排查
-
}
-
}
-
}
}
默认env的属性可以直接在pipeline中引用。所以,以上方法都是合法的。但是不推荐方法三,因为出现变量冲突时,非常难查问题。echo只是为了展示,实际应用可以修改变量来达到不同的定制化。
通过访问http://localhost:8080/env-vars.html/
或者http://localhost:8080/pipeline-syntax/globals#env
来获取完整列表。在列表中,当一个变量被声明为”For a multibranch project”时,代表只有多分支项目才会有此变量。
打印当前环境变量
sh "printenv"
//打印环境变量
二.自定义环境变量
当pipeline变得复杂时,我们就会有定义自己的环境变量的需求。声明式pipeline提供了environment指令,方便自定义变量。比如:
pipeline {
agent any
environment {
CC =
"clang"
-
}
stages {
stage("Example")
{
environment {
DEBUG_FLAGS =
"-g"
-
}
steps {
sh "${CC} ${DEBUG_FLAGS}"
sh "printenv"
-
}
-
}
-
}
}
environment指令可以用在pipeline中定义,作用域就是整个pipeline,当定义在stage阶段,只在当前stage有效。
环境变量的互相引用:
environment {
__server_name =
'mail-server'
__version =
"${BUILD_NUMBER}"
__artifact_name =
"${__server_name}-${__version}.jar"
}
技巧:
自定义变量时,为避免命名冲突,可根据项目或公司加上统一前缀,如__server_name,__就是前缀。