我正在尝试创建一个声明式Jenkins管道脚本,但在简单的变量声明方面遇到了问题。
下面是我的脚本:
pipeline {
agent none
stages {
stage("first") {
def foo = "foo" // fails with "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"
^
我在Jenkins2.7.4和管道2.4上。
7条答案
按热度按时间t1rydlwq1#
Jenkins Pipelines的宣告式模型在
stage
区块中允许使用受限的语法子集-请参阅语法指南以取得更多信息。您可以将步骤 Package 在script { ... }
区块中,以绕过该限制,但结果会遗失script
区块中的语法、参数等验证。doinxwow2#
我认为错误不是来自指定的行,而是来自前3行。请尝试以下方法:
我认为您有一些无效的额外行...
从declaractive pipeline model documentation来看,似乎必须使用
environment
声明块来声明变量,例如:31moq8wy3#
同意@Pom12,@abayer.要完成答案,您需要添加脚本块
请尝试以下操作:
db2dz4w84#
在Jenkins 2.138.3中,有两种不同类型的管道。
声明性管道和脚本化管道。
“声明性管道是DSL管道的新扩展(它基本上是一个只有一个步骤的管道脚本,一个带有参数的管道步骤(称为指令),这些指令应该遵循特定的语法。这种新格式的要点是它更严格,因此对于管道新手来说应该更容易,允许图形编辑和更多。脚本化管道是高级要求的后备。”
jenkins pipeline: agent vs node?
下面是一个在声明性管道中使用环境变量和全局变量的例子。从我可以看出,环境变量在设置后是静态的。
1aaf6o9v5#
您正在使用需要script-step来执行Groovy代码的声明性管道。这与脚本管道相比是一个巨大的区别,脚本管道不需要。
官方文件如下:
指令码步骤会取得指令码管缐的区块,并在宣告式管缐中执行。
4xy9mtcn6#
你可以定义变量global,但是在使用这个变量时必须写入脚本块。
trnvg8h37#
试试这个声明性管道,它的工作