Jenkins工作流环境变量导致失败

时间:2015-12-01 06:20:18

标签: jenkins jenkins-workflow

对于这个非常简单的工作流程:

env.FOO = 42
node {
  sh "echo $FOO"
}

我收到以下错误:

Running: End of Workflow
groovy.lang.MissingPropertyException: No such property: FOO for class: WorkflowScript

如何在工作流程shell步骤中访问环境变量?

2 个答案:

答案 0 :(得分:5)

原因是使用双引号时,Groovy的字符串插值会启动并查找FOO的工作流范围变量。

修复使用单引号:

sh 'echo $FOO'

另请注意,您可以在带双引号的脚本中使用工作流变量:

def FOO = 43

node {
  sh "echo $FOO"
}

这将在运行脚本之前扩展$FOO 的值。

答案 1 :(得分:5)

我遇到了需要混合插值的问题。脚本的一部分在之前被插值,并且脚本的一部分在插值期间被插入。使用反斜杠来逃避在运行期间插入的变量的技巧:

def FOO = 42

node {
  sh """
    BAR = "hello $FOO"
    echo \$BAR
  """
}

因此在脚本运行之前会扩展$ FOO,并且在脚本运行期间会扩展\ $ BAR。