使用 Intellij Idea 在 Java 项目中突出显示 Jenkinsfile 语法

Posted

技术标签:

【中文标题】使用 Intellij Idea 在 Java 项目中突出显示 Jenkinsfile 语法【英文标题】:Jenkinsfile syntax highlighting in Java project using Intellij Idea 【发布时间】:2018-05-27 13:31:09 【问题描述】:

我们已经尝试了以下方法:

https://github.com/oliverlockwood/jenkinsfile-idea-plugin https://st-g.de/2016/08/jenkins-pipeline-autocompletion-in-intellij

在连续几天在网上搜索了几个小时后,我们仍然没有找到关于这个问题的有用资源。因此,在这里提出一个新问题似乎是有意义的。

我们正在使用 IntelliJ idea 开发我们的 Java 项目,并希望将我们的构建与 Jenkins 集成。当我们在 Idea 中创建 Jenkinsfile 时,我们不会获得语法高亮或自动补全。由于我们是 Jenkins 的新手,因此这些功能对我们非常有用。我们如何让 Idea 对 Jenkinsfiles 提供更多支持?

如果没有办法在idea中获得Jenkinsfile的语法高亮和自动补全,还有哪些其他编辑器会有所帮助?

请注意:

我们正在处理 java 项目,而不是 groovy 项目。

我们已经尝试过插件https://github.com/oliverlockwood/jenkinsfile-idea-plugin。当插件被激活时,Jenkinsfile 会被识别出来,但我们会收到一条错误消息,而不是语法高亮,请参见下文。

 pipeline 
 agent  docker 'maven:3.3.3' 
 stages 
     stage('build') 
         steps 
             sh 'echo Hello, World!'
         
     
   
 

想法将ppipeline 突出显示为错误。错误信息如下:

JenkinsTokenType.COMMENT, JenkinsTokenType.CRLF or JenkinsTokenType.STEP_KEY expected, got 'p'

感谢您的帮助!

【问题讨论】:

有一个自定义插件:plugins.jetbrains.com/plugin/10127-jenkinsfile-idea-plugin 和功能请求:youtrack.jetbrains.com/issue/IDEA-158104 @y.bedrov 感谢您的评论。我们已经尝试过指定的插件,但只收到一条错误消息,但没有语法突出显示或自动完成。您对该插件的体验如何,它对您有用吗? 我不知道你为什么需要一个插件来处理这些基本的东西。只需将“Jenkinsfile”添加为 Groovy 的文件类型(设置 > 编辑器 > 文件类型 > Groovy 并将“Jenkinsfile”添加为“注册模式”)。设置后缺少什么? @Tom 谢谢!实际上,您的评论是关于我们正在寻找的内容。请提供此信息作为答案,我将接受它作为正确/最有帮助的答案。 @Tom 缺少的是实际 Jenkins DSL 的自动完成和验证 【参考方案1】:

如果您希望 IDEA 将 Jenkinsfile 识别为 Groovy 文件,则可以添加字符串“Jenkinsfile”作为 Groovy 文件的有效文件名模式(通常包含文件结尾)。这是“开箱即用”支持的,不需要任何额外的插件(“Groovy”插件除外,但这已经是 IDEA 的一部分)。

为此,请转到设置菜单,打开“编辑器”项,然后打开“文件类型”。现在在上方列表中选择“Groovy”并添加“Jenkinsfile”。如果您想更灵活地处理 Jenkinsfile 的可选文件结尾,也可以使用“Jenkinsfile*”之类的正则表达式。 设置现在应该如下所示:

您的示例现在在 IDEA 中如下所示(使用 Dracula 主题):

据我所知,IDEA 现在提供语法高亮和自动完成功能。它在编写时建议现有的函数/方法名称,但我不是 Groovy 开发人员,因此我无法判断是否缺少一些建议。

【讨论】:

人们想要的功能包括the GDSL 的验证/自动完成/快速文档和the linter 的集成。一个理想的插件会以最少的配置使一切“正常工作”(例如,只需将其指向 Jenkins 实例)。 请注意,groovy 文件类型仅在 InteliJ 和 android Studio 中可用,在 PyCharm 2018.3.2 中。我想因为这个插件是必需的plugins.jetbrains.com/plugin/1524-jetgroovy 还可以考虑从 https:///job//pipeline-syntax/gdsl 的 Jenkins 实例下载 gdsl 文件,并将它们放入项目的 Groovy 类路径中。 这是个好主意,但需要配置 Groovy SDK 太棒了!太棒了!我能够以相同的方式重新分配我们的 Jenkinsfile.declarative 文件,以便我们同时获得语法高亮和代码完成。对我们来说,*.declarative 被分配给文本文件类型。【参考方案2】:

终于我们找到了一个适合我们的解决方案,并为在 Idea 中的一个普通 Java 项目中存在的 Jenkinsfile 提供语法突出显示和代码完成。 解决方案取自here、here(以及其他个人实验/研究)

    从the Groovy Page 下载 Groovy SDK(如果您还没有这样做的话)并在您的 Java 项目中进行配置。有关这方面的帮助,请参阅here

    从您的 Jenkins 实例下载管道 GDSL 文件,该文件应该可以在 https://yourJenkinsInstance.tld/pipeline-syntax/gdsl 之类的链接下获得,并将其添加到您的 Java 项目的类路径中。例如。通过创建一个新文件夹 src/main/jenkins,将管道 gdsl 文件放在那里并将该文件夹标记为 IntelliJ Idea 中的源根目录

    添加“Jenkinsfile”作为 groovy 文件的有效文件名模式,如 here 所述

    为避免出现错误消息'node' cannot be applied to '(groovy.lang.Closure<java.lang.Object>),您可以在 Jenkinsfile 顶部添加此行:

    // 无检查 GroovyAssignabilityCheck

【讨论】:

【参考方案3】:

另一种选择是在 Jenkinsfile 顶部使用 shabang,例如 #!/usr/bin/env groovy。你也可以试试gdsl:https://st-g.de/2016/08/jenkins-pipeline-autocompletion-in-intellij 但到目前为止它不支持声明式管道:https://issues.jenkins-ci.org/browse/JENKINS-40127

【讨论】:

【参考方案4】:

如果你添加

#!groovy​

到您的 jenkinsfile 的标题,然后您应该在 IDE 中获得 groovy 语法高亮显示。

【讨论】:

在 intellij 中它不起作用,而且这个答案通常太模糊【参考方案5】:

看源码,好像COMMENTS没有定义(在代码中被注释掉了)

STEP_KEY 定义为:STEP_NAME="sh" | "parallel"

我不确定这个插件能做更多的事情,它已经有 2 年没有更新了。

【讨论】:

【参考方案6】:

像这样使用sh,错误应该会消失(对我有用)...

steps 
    sh """
        echo 'Hello, World!'
    """

【讨论】:

以上是关于使用 Intellij Idea 在 Java 项目中突出显示 Jenkinsfile 语法的主要内容,如果未能解决你的问题,请参考以下文章

Java开发平台IntelliJ IDEA v2016.3发布,完善多项视图|附下载

IntelliJ IDEA里面怎么配置SVN

如何在 Intellij Idea 中找出未使用的依赖项 Maven

使用 Gradle build 在 IntelliJ IDEA 中获取 Gradle 依赖项

IntelliJ IDEA :Debug的使用

intellij idea svn怎么比较