Jenkins Pipeline 访问环境变量
Jenkins Pipeline accessing environment variables
我正在尝试在 Jenkins 中使用 DSL 管道。我认为如果我可以将项目名称用作我的脚本的一部分,那就太好了。
git credentialsId: 'ffffffff-ffff-ffff-ffff-ffffffffffffff',\
url: "${repo_root}/${JOB_NAME}.git"
我收到错误:
groovy.lang.MissingPropertyException: \
No such property: JOB_NAME for class: groovy.lang.Binding
我以为我遵循了 these directions,他们提到 JOB_NAME
作为变量之一。
我决定试试:
sh 'env'
在我的 DSL 中,打印出来:
JOB_NAME = foo-bar
这是我所期望的。
另一个blog mentions:
Usage of environment variables
We have two ways to get their value. The properties passed by -D=
during the startup we could read as System.getProperty("key")
thanks to the Groovy's strong relation with Java.
Reading normal environment variables in Java way is the System.getenv("VARIABLE")
...
让我们试试这个:
println "JOB_NAME = " + System.getenv('JOB_NAME');
现在,我得到:
java.lang.NullPointerException: Cannot get property 'System' on null object
空对象?但是,我可以看到 JOB_NAME
是一个环境变量!
如何在管道作业中将 $JOB_NAME
读入 DSL 脚本。我正在尝试一个管道作业,当我开始工作时将使它成为一个具有 Jenkinsfile
.
的多分支管道
所有环境变量都可以使用 env
访问,例如${env.JOB_NAME}
.
确实只是使用${env.JOB_NAME}
访问一个已知变量。
但是,如果您需要访问名称由另一个变量给出的环境变量(动态访问),只需使用 env["your-env-variable"]
.
我在配置 3 个环境变量时遇到了问题(在 Jenkins -> Administer -> Configure System -> Environment variables
中),让我们将它们命名为 ENV_VAR_1
、ENV_VAR_2
、ENV_VAR_3
。
现在我想动态访问它们,我可以这样做:
def envVarName = "ENV_VAR_" + count // Suppose count is initialized in a loop somewhere above...
def value = env[envVarName] // Will be resolved to env["ENV_VAR_1"] depending on count value
我在 Jenkins 配置中的环境变量如下所示:
我遇到了无法正常工作的问题。全局设置的 properties/environment 变量仅在 node
步骤中可用。这是 Pipeline 插件 2.4 版中的一个错误。如果您遇到此问题,请升级到 2.5,您的全局属性将在脚本中的任何位置可用。我已经使用我使用的测试脚本将其发布到 Jenkins wiki here。
好吧,这让我今天很烦恼。最终,我被几件事搞定了:
- Groovy 中的单引号字符串与 bash
中的意思相同 "don't evaluate variables,"
- 如果您只是引用变量,则完全没有必要使用 $ 插值,因此您可以直接执行
env.JOB_NAME
.
这个 SO 问题被证明是帮助我破解代码的问题:Jenkins Workflow Checkout Accessing BRANCH_NAME and GIT_COMMIT
我正在尝试在 Jenkins 中使用 DSL 管道。我认为如果我可以将项目名称用作我的脚本的一部分,那就太好了。
git credentialsId: 'ffffffff-ffff-ffff-ffff-ffffffffffffff',\
url: "${repo_root}/${JOB_NAME}.git"
我收到错误:
groovy.lang.MissingPropertyException: \
No such property: JOB_NAME for class: groovy.lang.Binding
我以为我遵循了 these directions,他们提到 JOB_NAME
作为变量之一。
我决定试试:
sh 'env'
在我的 DSL 中,打印出来:
JOB_NAME = foo-bar
这是我所期望的。
另一个blog mentions:
Usage of environment variables
We have two ways to get their value. The properties passed by-D=
during the startup we could read asSystem.getProperty("key")
thanks to the Groovy's strong relation with Java.Reading normal environment variables in Java way is the
System.getenv("VARIABLE")
...
让我们试试这个:
println "JOB_NAME = " + System.getenv('JOB_NAME');
现在,我得到:
java.lang.NullPointerException: Cannot get property 'System' on null object
空对象?但是,我可以看到 JOB_NAME
是一个环境变量!
如何在管道作业中将 $JOB_NAME
读入 DSL 脚本。我正在尝试一个管道作业,当我开始工作时将使它成为一个具有 Jenkinsfile
.
所有环境变量都可以使用 env
访问,例如${env.JOB_NAME}
.
确实只是使用${env.JOB_NAME}
访问一个已知变量。
但是,如果您需要访问名称由另一个变量给出的环境变量(动态访问),只需使用 env["your-env-variable"]
.
我在配置 3 个环境变量时遇到了问题(在 Jenkins -> Administer -> Configure System -> Environment variables
中),让我们将它们命名为 ENV_VAR_1
、ENV_VAR_2
、ENV_VAR_3
。
现在我想动态访问它们,我可以这样做:
def envVarName = "ENV_VAR_" + count // Suppose count is initialized in a loop somewhere above...
def value = env[envVarName] // Will be resolved to env["ENV_VAR_1"] depending on count value
我在 Jenkins 配置中的环境变量如下所示:
我遇到了无法正常工作的问题。全局设置的 properties/environment 变量仅在 node
步骤中可用。这是 Pipeline 插件 2.4 版中的一个错误。如果您遇到此问题,请升级到 2.5,您的全局属性将在脚本中的任何位置可用。我已经使用我使用的测试脚本将其发布到 Jenkins wiki here。
好吧,这让我今天很烦恼。最终,我被几件事搞定了:
- Groovy 中的单引号字符串与 bash 中的意思相同 "don't evaluate variables,"
- 如果您只是引用变量,则完全没有必要使用 $ 插值,因此您可以直接执行
env.JOB_NAME
.
这个 SO 问题被证明是帮助我破解代码的问题:Jenkins Workflow Checkout Accessing BRANCH_NAME and GIT_COMMIT