我正尝试在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
我以为我遵循了这些方向,他们提到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
读入DSL脚本。我正在尝试管道作业,当我开始工作时,将使其成为具有Jenkinsfile
的多分支管道。
4条答案
按热度按时间nom7f22z1#
使用
env
可以访问所有环境变量,例如${env.JOB_NAME}
。6vl6ewon2#
好吧,今天这真的让我烦恼了一段时间。最终,我被几件事搞砸了:
env.JOB_NAME
。这个问题证明是一个帮助我破解代码:Jenkins Workflow Checkout Accessing BRANCH_NAME and GIT_COMMIT
ujv3wf0j3#
实际上,只需使用
${env.JOB_NAME}
来访问一个已知变量。但是,如果您需要访问由另一个变量提供名称的环境变量(动态访问),只需使用
env["your-env-variable"]
。我在配置3个环境变量时遇到了问题(在
Jenkins -> Administer -> Configure System -> Environment variables
中),让我们将它们命名为ENV_VAR_1
,ENV_VAR_2
,ENV_VAR_3
。现在我想动态访问它们,我可以这样做:Jenkins配置中的环境变量如下所示:
vpfxa7rd4#
我遇到了一个问题。全局设置的属性/环境变量只在
node
步骤中可用。这是Pipeline插件2.4版本中的一个bug。如果你遇到这个问题,请升级到2.5版本,你的全局属性将在脚本中的任何地方可用。我已经将这个问题与我使用的测试脚本一起发布到Jenkins wiki。