我试图在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:
环境变量的使用
我们有两种方法可以获得它们的价值。由于Groovy与Java的强大关系,-D=
在启动期间传递的属性我们可以读作System.getProperty("key")
。以Java方式读取常规环境变量是
System.getenv("VARIABLE")
...
让我们试试这个:
println "JOB_NAME = " + System.getenv('JOB_NAME');
现在,我明白了:
java.lang.NullPointerException: Cannot get property 'System' on null object
空物体?但是,我可以看到JOB_NAME
是一个环境变量!
如何将$JOB_NAME
读入Pipeline作业中的DSL脚本。我正在尝试一个Pipeline工作,当我开始工作时会使这个为Jenkinsfile
的多分支管道。
答案 0 :(得分:48)
可以使用env
访问所有环境变量,例如${env.JOB_NAME}
。
答案 1 :(得分:2)
确实只需使用${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配置中的环境变量如下所示:
答案 2 :(得分:1)
我有一个问题,这不起作用。全局设置的属性/环境变量仅在node
步骤中可用。这是Pipeline插件2.4版中的一个错误。如果您遇到此问题,请升级到2.5,并且您的全局属性将在脚本中的任何位置可用。我已经使用我使用的测试脚本将其发布到Jenkins wiki here。