Чи є інструмент, який дає змогу перевірити Jenkinsfiles в Інтернеті?


13

На даний момент я редагую Jenkinsfile, а потім відпускаю його, якщо Дженкінс не повідомить про проблему. Такий підхід коштує чимало часу. Я вважаю за краще перевірити синтаксис перед тим, як здійснити файл Jenkinsfile. Чи є інструмент, який вирішує це питання?

У gitlab є URI, тобто /ci/lintдає можливість подати файл gitlab, натисніть на кнопку перевірки, і тоді інтерфейс вкаже, чи правильний синтаксис чи ні.

Відповіді:


13

Ось деяка документація про лінійку трубопроводів Дженкінса та його команди. Чи потрібно перевірити перед фіксацією? Якщо ні, то було б справді тривіально запустити команду зв’язування перед запуском трубопроводу, і просто вийти з ладу, якщо вона не пройде.

Від конвеєра трубопроводу командного рядка :

Дженкінс може перевірити або « втягнути » декларативний конвеєр із командного рядка, перш ніж його фактично запустити. Це можна зробити за допомогою команди Jenkins CLI або за допомогою HTTP POST-запиту з відповідними параметрами. Ми рекомендуємо використовувати інтерфейс SSH для запуску лінеру. Детальну інформацію про те, як правильно налаштувати Jenkins для безпечного доступу до командного рядка, див. У документації Jenkins CLI .

Зв'язок через 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

Підключення через 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

Приклади

Нижче наведено два приклади дії трубопроводу. Цей перший приклад показує вихід лінійки, коли він передається недійсним Jenkinsfile, той, на якому відсутня частина agentдекларації.

Дженкінсфіл

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. Тепер лінійка повідомляє, що трубопровід є дійсним.

Дженкінсфіл

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

Вихід лінтера для дійсного Jenkinsfile

ssh -p 8675 localhost declarative-linter < ./Jenkinsfile
Jenkinsfile successfully validated.

Чи можете ви пояснити, як користуватися клієнтом на місцевому рівні? java -jar jenkins-cli.jar [-s JENKINS_URL] [global options...] command [command options...] [arguments...]
030


Дякуємо, що опублікували відповідь. Чи є також онлайн-інструмент? Було б чудово, якби можна було перейти до інтерфейсу користувача, опублікувати jenkinsfile і перевірити, чи є проблеми з синтаксисом. Я оновив питання.
030

@ 030 Я сумніваюся, що є онлайн-інструмент для лінійки, але це здається цікавим проектом, щоб взяти на себе :) Щоб користуватися лінером локально, вам потрібно увійти на свій сервер Дженкінса за допомогою своїх облікових даних, а потім "попросити" Дженкінса підписати ваш jenkinsfile. pierre-beitz.eu/2017/01/17/…
PrestonM

Чи можете ви до цього відповіді додати кілька фрагментів із цього посилання. Якщо посилання застаріле, інформація не буде втрачена.
030
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.