Jenkins 环境变量是通过 env 变量公开的全局变量,可以在 Jenkins 文件中的任何位置使用
存储在 env 变量中的任何值都存储为字符串类型
环境变量可以在 pipeline 顶层、特定 stage 或 script 块内部设置
环境变量的作用范围
1、要注意的是单引号 ‘,双引号 ",三单引号 ‘’’,三双引号 “”" 的使用区别;三双引号 “”" 内,单引号和双引号均可以打印变量;三单引号 ‘’’ 内,单引号打印原始字符串,双引号可以打印变量
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 stages { stage('Quote Test' ) { steps { echo BUILD_ID echo 'BUILD_ID' echo "BUILD_ID" echo $BUILD_ID echo '$BUILD_ID' echo "$BUILD_ID" echo ${BUILD_ID} echo '${BUILD_ID}' echo "${BUILD_ID}" script { echo BUILD_ID echo 'BUILD_ID' echo "BUILD_ID" echo $BUILD_ID echo '$BUILD_ID' echo "$BUILD_ID" echo ${BUILD_ID} echo '${BUILD_ID}' echo "${BUILD_ID}" sh """ # 在 sh 三双引号内,均可以打印变量 echo ${BUILD_ID} # 92 echo '${BUILD_ID}' # 92 echo "${BUILD_ID}" # 92 """ sh ''' # 在 sh 三单引号内,使用单引号打印单引号内字符串 echo ${BUILD_ID} # 92 echo '${BUILD_ID}' # ${BUILD_ID} echo "${BUILD_ID}" # 92 ''' } } } }
2、在 pipeline 中使用 environment{} 块以 VARIABLE_NAME = value 的形式定义的变量在每个 stage 内都有效;在一个 stage 中使用 environment{} 块以 VARIABLE_NAME = value 的形式定义的变量仅在该 stage 中有效
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 environment { FOO0 = "023" } stages { stage('Env Variables Scope Test1' ) { environment { FOO1 = "123" } steps { script { echo FOO0 echo FOO1 sh "printenv" } } } stage('Env Variables Scope Test2' ) { steps { script { echo FOO0 echo FOO1 sh "printenv" } } } }
3.1、在 script 中以 env.VARIABLE_NAME = value 的形式定义的变量在每个 stage 内有效
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 stages { stage('Env Variables Scope Test1' ) { steps { script { env.FOO = "abc" echo "${FOO}" } echo "${FOO}" } } stage('Env Variables Scope Test2' ) { steps { script { echo "${FOO}" sh "printenv" sh """ # 打印结果 abc,在 script 内、sh 内、三双引号内有效 echo "${FOO}" # abc printenv // FOO 被打印 """ sh ''' # 打印结果 abc,在 script 内、sh 内、三单引号内有效 echo "${FOO}" # abc printenv // FOO 被打印 ''' } } } }
3.2、⚠️ 在 script 中以 VARIABLE_NAME = value 的形式定义的变量不存储在 env 变量中;在每个 stage 内 sh 外以及 sh 三双引号内有效,sh 三单引号内无效;此形式定义的变量在 sharedlibraries 中不能直接使用
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 stages { stage('Env Variables Scope Test1' ) { steps { script { FOO = "abc" echo "${FOO}" } echo "${FOO}" } } stage('Env Variables Scope Test2' ) { steps { echo "${FOO}" sh "printenv" sh """ # 打印结果 abc,在 script 外的 sh 三双引号内有效 echo ${FOO} echo '${FOO}' echo "${FOO}" printenv """ sh ''' # 打印结果 abc,在 sh 三单引号内无效 echo ${FOO} # 空打印 echo '${FOO}' # ${FOO} echo "${FOO}" # 空打印 printenv # 不存在 FOO ''' script { echo "${FOO}" sh "printenv" sh """ # 打印结果 abc,在 script 内的 sh 三双引号内有效 echo ${FOO} echo '${FOO}' echo "${FOO}" printenv # 不存在 FOO """ sh ''' # 打印结果 abc,在 sh 三单引号内无效 echo ${FOO} # 空打印 echo '${FOO}' # ${FOO} echo "${FOO}" # 空打印 printenv # 不存在 FOO ''' } } } }
环境变量的获取
1、通过访问 ${YOUR_JENKINS_HOST}/env-vars.html 页可以查看所有可用的内置环境变量
2、使用 printenv 打印查看所有环境变量
1 2 3 4 5 6 7 8 9 10 11 12 13 pipeline { stages { stage("Env Variables" ) { steps { sh "printenv" } } } }
3、通过 env 对象以管道步骤访问某个环境变量
例如 env.BUILD_NUMBER 访问当前的内部版本号,也可以省略 env,但在这种变体中,可能会引起困惑,不知道这个 BUILD_NUMBER 是来自于 env
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 pipeline { stages { stage("Env Variables" ) { steps { echo "The build number is ${env.BUILD_NUMBER}" echo "You can also use \${BUILD_NUMBER} -> ${BUILD_NUMBER}" sh 'echo "I can access ${BUILD_NUMBER} in shell command as well."' } } } }
环境变量的设置
1、使用 environment{} 块
⚠️ 注意事项:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 pipeline { environment { FOO1 = "bar1" BUILD_NUMBER = "2" } stages { stage("Env Variables" ) { environment { FOO2 = "bar2" FOO1 = "bar3" } } } }
2、使用 env.VARIABLE_NAME
⚠️ 注意事项:
无法使用命令 env.VAR=“value” 赋值重写使用 environment{}块设置的变量
命令式 env.VAR=“value” 赋值只能覆盖使用命令式赋值创建的环境变量
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 pipeline { stages { stage("Env Variables Create" ) { steps { script { env.FOO = "bar" } } } stage("Env Variables Notice Test" ) { environment { FOO1 = "bar1" } steps { script { env.FOO1 = "bar" env.FOO = "bar1" } } } } }
3、使用 withEnv([“VARIABLE_NAME=value”]){} 块以声明方式设置环境变量
⚠️ 注意事项:
value 可以使用变量
可以覆盖任何环境变量但是,只在紧接着的大括号内有效,在大括号外无效
withEnv 不能放在 sh 里,因为它不是一个 shell 命令
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 pipeline { stages { stage("Env Variables Create" ) { steps { withEnv(["FOO=bar" ]) { echo "FOO = ${env.FOO}" } } } stage("Env Variables Notice Test" ) { environment { FOO1 = "bar1" } steps { script { env.FOO2 = "bar2" } withEnv(["FOO1=foobar1" ]){} withEnv(["FOO2=foobar2" ]){} withEnv(["BUILD_NUMBER=1" ]){} } } } }
be slow to promise and quick to perform.