我正在将Jenkins与Pipelines一起使用,并已使用Jenkinsfile定义了脚本化管道。看起来像这样:

node {
  /* some stages */
}

我已经将Jenkins随附的GDSL文件导入到IntelliJ中。现在,我突出显示了语法,但是整个文件都在一个警告块中突出显示,IntelliJ为此显示以下消息:
'node' cannot be applied to '(groovy.lang.closure<Object>)'

我认为语法定义可能不支持将节点对象作为根,但是如果我尝试将pipeline作为根来写,则会出现相同的警告。

最佳答案

我找到了解决方案。 pipeline.gdsl文件(例如,从Jenkins下载并由我们放入IntelliJ的GDSL文件)中需要进行小的更改。

在gdsl文件中找到以下行:

method(name: 'node', type: 'Object',
       params: [label:java.lang.String, body:'Closure'],
       doc: 'Allocate node')

并在上一行之外添加以下行:
method(name: 'node', type: 'Object',
      params: [body:'Closure'],
      doc: 'Allocate node')

这将在语法树中创建一个重载定义,该定义告诉IntelliJ,该节点方法具有两个版本,一个版本既接受StringClosure,又一个版本仅接受Closure

关于带有GDSL的IntelliJ中的Jenkins管道。警告: 'node' cannot be applied to '(groovy.lang.closure<Object>)' ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47074631/

10-13 00:00