Gibt es ein Tool, mit dem Jenkinsfiles online validiert werden können?

13

Im Moment bearbeite ich eine Jenkins-Datei und lasse sie dann laufen, es sei denn, Jenkins meldet ein Problem. Dieser Ansatz kostet viel Zeit. Ich bevorzuge es, die Syntax zu validieren, bevor ich die Jenkins-Datei festschreibe. Gibt es ein Tool, das dieses Problem löst?

In gitlab gibt es eine URI, /ci/lintdie es ermöglicht, eine gitlab-Datei einzureichen. Klicken Sie auf die Check-Schaltfläche und die Benutzeroberfläche zeigt an, ob die Syntax korrekt ist oder nicht.

030
quelle

Antworten:

13

Hier finden Sie eine Dokumentation zu Jenkins Pipeline Linter und seinen Befehlen. Müssen Sie vor einem Commit validieren ? Wenn nicht, wäre es wirklich trivial, den Linting-Befehl auszuführen, bevor Ihre Pipeline ausgeführt wird, und einfach zu scheitern, wenn er nicht bestanden wird.

Aus dem Befehlszeilen-Pipeline-Linter :

Jenkins kann eine deklarative Pipeline über die Befehlszeile validieren oder " fusseln ", bevor sie tatsächlich ausgeführt wird. Dies kann mit einem Jenkins-CLI-Befehl oder durch eine HTTP-POST-Anforderung mit entsprechenden Parametern erfolgen. Wir empfehlen die Verwendung der SSH-Schnittstelle , um den Linter auszuführen. Weitere Informationen zum ordnungsgemäßen Konfigurieren von Jenkins für den sicheren Befehlszeilenzugriff finden Sie in der Jenkins-CLI-Dokumentation .

Fuseln über die CLI mit 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

Fusseln über HTTP POST mit 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

Beispiele

Im Folgenden finden Sie zwei Beispiele für den Pipeline Linter in Aktion. Dieses erste Beispiel zeigt die Ausgabe des Linter, wenn ein ungültiger Wert übergeben wird Jenkinsfile, bei dem ein Teil der agentDeklaration fehlt .

Jenkinsfile

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

Linterausgabe für ungültiges 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;
   ^

In diesem zweiten Beispiel wird die Jenkinsfile aktualisiert, um die fehlenden zu anyberücksichtigen agent. Der Linter meldet nun, dass die Pipeline gültig ist.

Jenkinsfile

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

Linter-Ausgabe für gültige Jenkins-Datei

ssh -p 8675 localhost declarative-linter < ./Jenkinsfile
Jenkinsfile successfully validated.
PrestonM
quelle
Können Sie erklären, wie Sie den Client lokal verwenden? java -jar jenkins-cli.jar [-s JENKINS_URL] [global options...] command [command options...] [arguments...]
030
Vielen Dank für Ihre Antwort. Gibt es auch ein Online-Tool? Es wäre großartig, wenn man zu einer Benutzeroberfläche navigieren, eine Jenkins-Datei posten und prüfen könnte, ob Syntaxprobleme vorliegen. Ich habe die Frage aktualisiert.
030
@ 030 Ich bezweifle, dass es ein Online-Linter-Tool gibt, aber es klingt nach einem unterhaltsamen Projekt :) Um den Linter lokal zu verwenden, müssen Sie sich mit Ihren Anmeldeinformationen bei Ihrem Jenkins-Server anmelden und dann Jenkins bitten, Ihren Linter zu "fusseln" jenkinsfile. pierre-beitz.eu/2017/01/17/…
PrestonM
Könnten Sie dieser Antwort einige Ausschnitte aus diesem Link hinzufügen? Wenn der Link veraltet ist, sind die Informationen weg.
030