使用 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!'
想法将p
的pipeline
突出显示为错误。错误信息如下:
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://*.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 中找出未使用的依赖项 Maven