【问题标题】:Jenkins pipeline in IntelliJ with GDSL. Warning: 'node' cannot be applied to '(groovy.lang.closure<Object>)'带有 GDSL 的 IntelliJ 中的 Jenkins 管道。警告:“节点”不能应用于“(groovy.lang.closure<Object>)”
【发布时间】:2024-04-24 20:50:02
【问题描述】:

我正在将 Jenkins 与流水线一起使用,并使用 Jenkinsfile 定义了一个脚本化流水线。它看起来像这样:

node {
  /* some stages */
}

我已将 Jenkins 附带的 GDSL 文件导入 IntelliJ。现在我得到了语法突出显示,但整个文件在单个警告块中突出显示,IntelliJ 显示以下消息:

'node' cannot be applied to '(groovy.lang.closure<Object>)'

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

【问题讨论】:

    标签: jenkins intellij-idea groovy


    【解决方案1】:

    我找到了解决方案。需要对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 节点方法有两个版本,一个接受String 和一个Closure,另一个只接受一个Closure

    【讨论】:

    • Jenkins Jira 中的跟踪问题:issues.jenkins-ci.org/browse/JENKINS-39488
    • 我试过了,但没有用。然后我找到了这个帖子,所以我再次尝试......我还必须重新启动 Idea 以更新 gdsl。
    最近更新 更多