Подсветка синтаксиса Jenkinsfile в проекте Java с использованием Intellij Idea

103

Мы уже пробовали подходы, перечисленные ниже:

После многочасового поиска в Интернете в течение нескольких дней мы так и не нашли полезного ресурса по этому вопросу. Таким образом, имеет смысл задать здесь новый вопрос.

Мы разрабатываем наши Java-проекты на IntelliJ idea и хотим интегрировать наши сборки с Jenkins. Когда мы создаем Jenkinsfile в Idea, мы не получаем подсветки синтаксиса или автозавершения. Поскольку мы новички в Jenkins, эти функции были бы нам действительно полезны. Как мы можем сделать Idea более поддерживающей с помощью Jenkinsfiles?

Если нет возможности получить подсветку синтаксиса и автоматическое завершение для 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 или JenkinsTokenType.STEP_KEY, получено 'p'

Спасибо за любую помощь!

Рексфорд
источник
Есть настраиваемый плагин: plugins.jetbrains.com/plugin/10127-jenkinsfile-idea-plugin и запрос функции: youtrack.jetbrains.com/issue/IDEA-158104
y.bedrov
@ y.bedrov спасибо за комментарий. Мы уже пробовали указанный плагин, но получили только сообщение об ошибке, но без подсветки синтаксиса или автозаполнения. Каков ваш опыт работы с плагином, он вам подходит?
Рексфорд
1
Я понятия не имею, зачем вам нужен плагин для этой базовой работы. Просто добавьте Jenkinsfile в качестве типа файла для Groovy (Настройки> Редактор> Типы файлов> Groovy и добавьте Jenkinsfile в качестве «Зарегистрированного шаблона»). Чего не хватает после этой настройки?
Tom
1
@Tom спасибо! Собственно, ваш комментарий о том, что мы искали. Пожалуйста, предоставьте эту информацию в качестве ответа, и я приму ее как правильный / самый полезный ответ.
rexford
2
@Tom Чего не хватает, так это автозаполнения и проверки подлинности Jenkins DSL
OrangeDog

Ответы:

233

Если вы хотите, чтобы IDEA распознавала Jenkinsfile как файл Groovy, вы можете добавить строку «Jenkinsfile» в качестве допустимого шаблона имени файла (обычно содержащего окончания файлов) для файлов Groovy. Это поддерживается «из коробки», не требуя никаких дополнительных подключаемых модулей (кроме подключаемого модуля «Groovy», который уже является частью IDEA).

Для этого зайдите в меню настроек, откройте пункт «Редактор», а затем «Типы файлов». Теперь выберите «Groovy» в верхнем списке и добавьте «Jenkinsfile». Вы также можете использовать регулярное выражение, такое как «Jenkinsfile *», если вы хотите быть более гибкими в отношении необязательного окончания файла для Jenkinsfile.
Теперь настройка должна выглядеть так: Настройки типа файла IDEA

Теперь ваш пример в IDEA (с темой Дракулы) выглядит так: Подсветка синтаксиса Jenkinsfile

Итак, IDEA теперь обеспечивает подсветку синтаксиса и автоматическое завершение, насколько я могу судить. Он предлагает существующие имена функций / методов во время написания, но я не разработчик Groovy, поэтому я не могу сказать, отсутствуют ли какие-то предложения.

Том
источник
6
Особенности , которые люди хотели бы включать в себя подтверждение / автодополнение / quickdocs для в GDSL и интеграции в пуха . Идеальный плагин заставит все «просто работать» с минимальной конфигурацией (например, просто укажите его на экземпляр Jenkins).
OrangeDog 07
2
Замечу, что тип файла groovy доступен только в InteliJ и Android studio, но не в PyCharm 2018.3.2. Я думаю, потому что этот плагин необходим plugins.jetbrains.com/plugin/1524-jetgroovy
Ming
Также рассмотрите возможность загрузки файла gdsl из вашего экземпляра Jenkins по адресу https: // <Jenkins> / job / <Job Name> / pipeline-syntax / gdsl и поместить их в путь к классам Groovy вашего проекта.
Стефан
2
Это хорошая идея, но для ее настройки требуется Groovy SDK
owensmartin
1
Гениально! TY так много! Я смог переназначить наши файлы Jenkinsfile.declarative таким же образом, чтобы мы получили как подсветку синтаксиса, так и завершение кода. Для нас *.declarativeбыл назначен тип файла Text.
icfantv,
1

Глядя на исходный код, похоже, что КОММЕНТАРИИ не определены (они закомментированы в коде)

STEP_KEY определяется как: STEP_NAME = "sh" | "параллельный"

Я не уверен, что плагин умеет намного больше, и он не обновлялся уже 2 года.

Нил Миллард
источник
1

Наконец-то мы нашли решение, которое работает для нас и обеспечивает подсветку синтаксиса и завершение кода для Jenkinsfile, присутствующего в обычном Java-проекте в Idea. Решение взято отсюда , здесь (и из дополнительных личных экспериментов / исследований)

  1. Загрузите Groovy SDK (если вы еще этого не сделали) со страницы Groovy и настройте его в своем проекте Java. Для получения справки см. Здесь

  2. Загрузите файл GDSL конвейера из вашего экземпляра Jenkins, который должен быть доступен по ссылке, например https: //yourJenkinsInstance.tld/pipeline-syntax/gdsl , и добавьте его в путь к классам вашего Java-проекта. Например, создав новую папку src / main / jenkins, поместив туда файл конвейера gdsl и пометив папку как исходный корень в IntelliJ Idea.

  3. Добавьте Jenkinsfile в качестве допустимого шаблона имени файла для файлов Groovy, как описано здесь.

  4. Чтобы избежать сообщения об ошибке 'node' cannot be applied to '(groovy.lang.Closure<java.lang.Object>), вы можете добавить эту строку вверху вашего Jenkinsfile:

    // noinspection GroovyAssignabilityCheck

Рексфорд
источник
0

Если вы добавите

#!groovy​

в ваш jenkinsfile, тогда вы должны получить отличную подсветку синтаксиса в IDE.

Камил Врубель
источник
В intellij это не работает, и этот ответ в целом слишком расплывчатый
Томер Гал
-14

Используйте shэто так, и ошибка должна исчезнуть (сработало для меня) ...

steps {
    sh """
        echo 'Hello, World!'
    """
}
Джош М.
источник