Ecco alcuni documenti sulla linter della pipeline Jenkins e sui suoi comandi. Devi convalidare prima di un commit? Altrimenti, sarebbe davvero banale eseguire il comando linting prima dell'esecuzione della pipeline, e semplicemente fallire se non passa.
Jenkins può convalidare, o " sfilacciare ", una pipeline dichiarativa dalla riga di comando prima di eseguirla effettivamente. Questo può essere fatto usando un comando CLI Jenkins o facendo una richiesta POST HTTP con parametri appropriati. Si consiglia di utilizzare l' interfaccia SSH per eseguire la linter. Consultare la documentazione della CLI di Jenkins per i dettagli su come configurare correttamente Jenkins per un accesso sicuro alla riga di comando.
Linting tramite l'interfaccia della riga di comando con 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 tramite HTTP POST utilizzando 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
Esempi
Di seguito sono riportati due esempi di Pipeline Linter in azione. Questo primo esempio mostra l'output del linter quando viene passato un invalido
Jenkinsfile
, a cui manca una parte della agent
dichiarazione.
Jenkinsfile
pipeline {
agent
stages {
stage ('Initialize') {
steps {
echo 'Placeholder.'
}
}
}
}
Uscita linter per file Jenkins non valido
# 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 }
^
In questo secondo esempio, il Jenkinsfile
è stato aggiornato per includere il mancante any
su agent
. La linter ora segnala che la pipeline è valida.
Jenkinsfile
pipeline {
agent any
stages {
stage ('Initialize') {
steps {
echo 'Placeholder.'
}
}
}
}
Uscita linter per file Jenkins valido
ssh -p 8675 localhost declarative-linter < ./Jenkinsfile
Jenkinsfile successfully validated.
java -jar jenkins-cli.jar [-s JENKINS_URL] [global options...] command [command options...] [arguments...]