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

Mic*_*ale 5 jenkins jenkins-workflow

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

env.FOO = 42
node {
  sh "echo $FOO"
}
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

Running: End of Workflow
groovy.lang.MissingPropertyException: No such property: FOO for class: WorkflowScript
Run Code Online (Sandbox Code Playgroud)

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

Den*_*oer 6

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

def FOO = 42

node {
  sh """
    BAR = "hello $FOO"
    echo \$BAR
  """
}
Run Code Online (Sandbox Code Playgroud)

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


Mic*_*ale 5

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

要修复使用单引号:

sh 'echo $FOO'
Run Code Online (Sandbox Code Playgroud)

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

def FOO = 43

node {
  sh "echo $FOO"
}
Run Code Online (Sandbox Code Playgroud)

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