Existe-t-il un outil permettant de valider les fichiers Jenkins en ligne?

13

En ce moment, je modifie un fichier Jenkins et le laisse s'exécuter à moins que Jenkins ne signale un problème. Cette approche coûte beaucoup de temps. Je préfère valider la syntaxe avant de valider le fichier Jenkins. Existe-t-il un outil qui résout ce problème?

Dans gitlab, il y a un URI, c'est-à /ci/lint- dire qui permet de soumettre un fichier gitlab, cliquez sur le bouton cocher et ensuite l'interface utilisateur indiquera si la syntaxe est correcte ou non.

030
la source

Réponses:

13

Voici une documentation sur le linter du pipeline Jenkins et ses commandes. Devez-vous valider avant un commit? Sinon, il serait vraiment trivial d'exécuter la commande linting avant l'exécution de votre pipeline, et échouera simplement si elle ne passe pas.

À partir de la ligne de commande Pipeline Linter :

Jenkins peut valider, ou " lint ", un pipeline déclaratif à partir de la ligne de commande avant de l'exécuter. Cela peut être fait à l'aide d'une commande CLI Jenkins ou en effectuant une requête HTTP POST avec les paramètres appropriés. Nous avons recommandé d'utiliser l' interface SSH pour exécuter le linter. Consultez la documentation Jenkins CLI pour plus de détails sur la façon de configurer correctement Jenkins pour un accès sécurisé en ligne de commande.

Linting via la CLI avec 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 via HTTP POST en utilisant 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

Exemples

Voici deux exemples de Pipeline Linter en action. Ce premier exemple montre la sortie du linter lorsqu'il est passé un invalide Jenkinsfile, celui qui manque une partie de la agentdéclaration.

Jenkinsfile

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

Sortie Linter pour fichier Jenkins non valide

# 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;
   ^

Dans ce second exemple, l' Jenkinsfilea été mis à jour pour inclure les disparus anysur agent. Le linter signale maintenant que le Pipeline est valide.

Jenkinsfile

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

Sortie Linter pour fichier Jenkins valide

ssh -p 8675 localhost declarative-linter < ./Jenkinsfile
Jenkinsfile successfully validated.
PrestonM
la source
Pourriez-vous expliquer comment utiliser le client localement? java -jar jenkins-cli.jar [-s JENKINS_URL] [global options...] command [command options...] [arguments...]
030
Merci d'avoir posté une réponse. Existe-t-il également un outil en ligne? Ce serait bien si l'on pouvait naviguer vers une interface utilisateur, publier un fichier jenkins et vérifier s'il y a des problèmes de syntaxe. J'ai mis à jour la question.
030
@ 030 Je doute qu'il existe un outil de linter en ligne, mais cela ressemble à un projet amusant à entreprendre :) Pour utiliser le linter localement, vous devez vous connecter à votre serveur Jenkins avec vos informations d'identification, puis "demander" à Jenkins de peloter votre jenkinsfile. pierre-beitz.eu/2017/01/17/…
PrestonM
Pourriez-vous ajouter des extraits de ce lien à cette réponse. Si le lien est obsolète, les informations disparaîtront.
030