Jenkins Pipeline 环境变量 的 查看,读取,设置,覆盖
1. 列出环境变量
首先列出所有可用的环境变量。您可以通过两种不同的方法进行操作。
1.1 ${YOUR_JENKINS_HOST}/env-vars.html
在 Jenkins 服务器上打开页面 ${YOUR_JENKINS_HOST}/env-vars.html,列出的所有环境变量的列表。
1.2 使用 shell 命令
另外,您可以通过执行 printenv 命令列出所有环境变量。
pipeline { agent any stages { stage("Env Variables") { steps { sh "printenv" //也可以使用 printenv | sort 进行排序 } } } }
2. 读取环境变量
您可以在 pipeline steps 中通过 env 对象来访问 环境变量
如:env.BUILD_NUMBER 返回 当前 build number
pipeline { agent any 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."' } } } }
输出结果
3.设置环境变量
可以 environment { } 块中、script 中命令式、或者 withEnv(["VARIABLE_NAME=value"]) { } 块 中设置声明环境变量
pipeline { agent any environment { FOO = "bar" } stages { stage("Env Variables") { environment { NAME = "Alan" } steps { echo "FOO = ${env.FOO}" echo "NAME = ${env.NAME}" script { env.TEST_VARIABLE = "some test value" } echo "TEST_VARIABLE = ${env.TEST_VARIABLE}" withEnv(["ANOTHER_ENV_VAR=here is some value"]) { echo "ANOTHER_ENV_VAR = ${env.ANOTHER_ENV_VAR}" } } } } }
输出结果
4.覆盖环境变量
Jenkins Pipeline 支持覆盖环境变量。您需要注意一些规则。
withEnv(["env=value]) { } 块可以覆盖任何环境变量。
命令式 env.VAR = "value" 不能覆盖 environment { } 块 中设置的环境变量
命令式 env.VAR = "value" 只能覆盖 命令式创建的环境变量。
pipeline { agent any environment { FOO = "bar" NAME = "Joe" } stages { stage("Env Variables") { environment { NAME = "Alan" // overrides pipeline level NAME env variable BUILD_NUMBER = "2" // overrides the default BUILD_NUMBER } steps { echo "FOO = ${env.FOO}" // prints "FOO = bar" echo "NAME = ${env.NAME}" // prints "NAME = Alan" echo "BUILD_NUMBER = ${env.BUILD_NUMBER}" // prints "BUILD_NUMBER = 2" script { env.SOMETHING = "1" // creates env.SOMETHING variable } } } stage("Override Variables") { steps { script { env.FOO = "IT DOES NOT WORK!" // it can't override env.FOO declared at the pipeline (or stage) level env.SOMETHING = "2" // it can override env variable created imperatively } echo "FOO = ${env.FOO}" // prints "FOO = bar" echo "SOMETHING = ${env.SOMETHING}" // prints "SOMETHING = 2" withEnv(["FOO=foobar"]) { // it can override any env variable echo "FOO = ${env.FOO}" // prints "FOO = foobar" } withEnv(["BUILD_NUMBER=1"]) { echo "BUILD_NUMBER = ${env.BUILD_NUMBER}" // prints "BUILD_NUMBER = 1" } } } } }
输出结果
5.将Boolean值存储在环境变量中
因为存储为环境变量的每个值都将转换为 String。当您存储布尔 false 值时,它将转换为 "false"。如果要在布尔表达式中正确使用该值,则需要调用 "false".toBoolean() 方法
pipeline { agent any environment { IS_BOOLEAN = false } stages { stage("Env Variables") { steps { script { if (env.IS_BOOLEAN) { echo "You can see this message, because \"false\" String evaluates to Boolean.TRUE value" } if (env.IS_BOOLEAN.toBoolean() == false) { echo "You can see this message, because \"false\".toBoolean() returns Boolean.FALSE value" } } } } } }
输出结果
6.将 shell 输出赋给环境变量
您还可以将 shell 命令的输出 捕获为环境变量。
请记住,您需要使用 sh(script: 'cmd', returnStdout:true) 来强制 sh 步骤返回输出,以便可以将其捕获并存储在变量中。
pipeline { agent any environment { LS = "${sh(script:'ls -lah', returnStdout: true)}" } stages { stage("Env Variables") { steps { echo "LS = ${env.LS}" } } } }
输出结果:
翻译自:Jenkins Pipeline Environment Variables - The Definitive Guide
共 0 条评论