问题描述
在Jenkins声明性流水线脚本中定义了一个变量,但在简单变量声明时遇到了问题。以下是他的脚本:
pipeline {
agent none
stages {
stage("first") {
def foo = "foo" // 失败,显示"WorkflowScript: 5: Expected a step @ line 5, column 13."
sh "echo ${foo}"
}
}
}
但是出现了以下错误:
org.codehaus.groovy.control.MultipleCompilationErrorsException:startup failed:WorkflowScript: 5: Expected a step @ line 5, column 13. def foo = "foo" ^
解决方案
请注意以下操作注意版本差异及修改前做好备份。
方案1
在Jenkins声明性流水线中,变量必须在script
部分中定义。
以下是修改后的脚本:
pipeline {
agent none
stages {
stage("first") {
steps {
script {
foo = "bar"
}
sh "echo ${foo}"
}
}
}
}
在上面的示例中,我们将变量定义移动到了script
部分中。这样就可以成功定义变量并使用它了。
方案2
请注意以下操作注意版本差异及修改前做好备份。
你还可以使用environment
块来注入环境变量。
以下是使用environment
块定义环境变量的示例:
pipeline {
agent none
environment {
FOO = "bar"
}
stages {
stage("first") {
steps {
echo "${env.FOO}"
// 或者 echo "${FOO}"
}
}
}
}
在上面的示例中,我们使用environment
块定义了一个名为FOO
的环境变量,并将其值设置为bar
。然后,在steps
部分中,我们可以使用${env.FOO}
或${FOO}
来引用该环境变量。
你甚至可以在stage
块内部定义环境变量,以限制其作用域:
pipeline {
agent none
stages {
stage("first") {
environment {
FOO = "bar"
}
steps {
// 输出 "bar"
echo "${env.FOO}"
// 或者 echo "${FOO}"
}
}
stage("second") {
steps {
// 输出 "null"
echo "${env.FOO}"
// 或者 echo "${FOO}",此处流水线将失败
}
}
}
}
在上面的示例中,我们在first
阶段的environment
块内部定义了一个名为FOO
的环境变量,并将其值设置为bar
。然后,在first
阶段的steps
部分中,我们可以使用${env.FOO}
或${FOO}
来引用该环境变量。在second
阶段中,我们尝试引用FOO
环境变量,但由于其作用域仅限于first
阶段,所以输出为null
,并且流水线将失败。
请注意,你可以在environment
块中使用动态代码来设置环境变量。
以上是在Jenkins声明性流水线中定义变量的两种方法。根据你的需求选择适合的方法即可。
正文完