Есть ли инструмент, который позволяет проверять Jenkinsfiles онлайн?

13

В данный момент я редактирую файл Jenkinsfile и затем запускаю его, если Jenkins не сообщит о проблеме. Такой подход стоит много времени. Я предпочитаю проверять синтаксис перед фиксацией Jenkinsfile. Есть ли инструмент, который решает эту проблему?

В gitlab есть URI, т. /ci/lintЕ. Он позволяет отправить файл gitlab, нажать на кнопку проверки, и тогда пользовательский интерфейс покажет, правильный ли синтаксис.

030
источник

Ответы:

13

Вот некоторая документация по линтеру Jenkins и его командам. Вам нужно проверить перед фиксацией? В противном случае было бы действительно тривиально выполнить команду linting до запуска конвейера и просто потерпеть неудачу, если она не проходит.

Из командной строки конвейер Линтер :

Jenkins может проверять или « задерживать » декларативный конвейер из командной строки перед его фактическим запуском. Это можно сделать с помощью команды CLI Jenkins или с помощью HTTP-запроса POST с соответствующими параметрами. Мы рекомендуем использовать интерфейс SSH для запуска линтера. Обратитесь к документации CLI Jenkins для получения подробной информации о том, как правильно настроить Jenkins для безопасного доступа из командной строки.

Linting через CLI с SSH

# ssh (Jenkins CLI)
# JENKINS_SSHD_PORT=[sshd port on master]
# JENKINS_HOSTNAME=[Jenkins master hostname]
ssh -p $JENKINS_SSHD_PORT $JENKINS_HOSTNAME declarative-linter < Jenkinsfile

Linting через HTTP POST с помощью curl

# curl (REST API)
# Assuming "anonymous read access" has been enabled on your Jenkins instance.
# JENKINS_URL=[root URL of Jenkins master]
# JENKINS_CRUMB is needed if your Jenkins master has CRSF protection enabled as it should
JENKINS_CRUMB=`curl "$JENKINS_URL/crumbIssuer/api/xml?xpath=concat(//crumbRequestField,\":\",//crumb)"`
curl -X POST -H $JENKINS_CRUMB -F "jenkinsfile=<Jenkinsfile" $JENKINS_URL/pipeline-model-converter/validate

Примеры

Ниже приведены два примера работы Pipeline Linter в действии. В этом первом примере показан вывод linter, когда ему передано недопустимое значение Jenkinsfile, в котором отсутствует часть agentобъявления.

Jenkinsfile

pipeline {
  agent
  stages {
    stage ('Initialize') {
      steps {
        echo 'Placeholder.'
      }
    }
  }
}

Вывод линтера для неверного файла Jenkinsfile

# pass a Jenkinsfile that does not contain an "agent" section
ssh -p 8675 localhost declarative-linter < ./Jenkinsfile
Errors encountered validating Jenkinsfile:
WorkflowScript: 2: Not a valid section definition: "agent". Some extra configuration is required. @ line 2, column 3.
     agent
     ^

WorkflowScript: 1: Missing required section "agent" @ line 1, column 1.
   pipeline &#125;
   ^

В этом втором примере, Jenkinsfileбыл обновлен , чтобы включить недостающее anyна agent. Теперь линтер сообщает, что конвейер действителен.

Jenkinsfile

pipeline {
  agent any
  stages {
    stage ('Initialize') {
      steps {
        echo 'Placeholder.'
      }
    }
  }
}

Вывод Linter для действительного Jenkinsfile

ssh -p 8675 localhost declarative-linter < ./Jenkinsfile
Jenkinsfile successfully validated.
PrestonM
источник
Не могли бы вы объяснить, как использовать клиент локально? java -jar jenkins-cli.jar [-s JENKINS_URL] [global options...] command [command options...] [arguments...]
030
Спасибо за публикацию ответа. Есть ли онлайн-инструмент? Было бы здорово, если бы можно было перейти к пользовательскому интерфейсу, опубликовать jenkinsfile и проверить, есть ли проблемы с синтаксисом. Я обновил вопрос.
030
@ 030 Я сомневаюсь, что есть онлайн-инструмент для линтера, но он звучит как забавный проект, который можно использовать :) Чтобы использовать линтера локально, вам необходимо войти в систему на своем сервере Jenkins с вашими учетными данными, а затем «попросить» Дженкинса задержать ваш jenkinsfile. pierre-beitz.eu/2017/01/17/…
PrestonM
Не могли бы вы добавить некоторые фрагменты из этой ссылки к этому ответу. Если ссылка устарела, информация исчезнет.
030