Jenkins Pipeline访问环境变量

时间:2016-07-26 20:50:07

标签: jenkins jenkins-workflow jenkins-pipeline

我试图在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的多分支管道。

3 个答案:

答案 0 :(得分:48)

可以使用env访问所有环境变量,例如${env.JOB_NAME}

答案 1 :(得分:2)

确实只需使用${env.JOB_NAME}来访问已知变量。

但是,如果您需要访问其他变量(动态访问)给出名称的环境变量,请使用env["your-env-variable"]

我遇到了配置3个环境变量的问题(在Jenkins -> Administer -> Configure System -> Environment variables中),我们将它们命名为ENV_VAR_1ENV_VAR_2ENV_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配置中的环境变量如下所示:

enter image description here

答案 2 :(得分:1)

我有一个问题,这不起作用。全局设置的属性/环境变量仅在node步骤中可用。这是Pipeline插件2.4版中的一个错误。如果您遇到此问题,请升级到2.5,并且您的全局属性将在脚本中的任何位置可用。我已经使用我使用的测试脚本将其发布到Jenkins wiki here