Aqui está alguma documentação sobre o linter de pipeline do Jenkins e seus comandos. Você precisa validar antes de uma confirmação? Caso contrário, seria realmente trivial executar o comando linting antes da execução do pipeline e simplesmente falhar se não for aprovado.
Jenkins pode validar, ou " lint ", um pipeline declarativo na linha de comando antes de executá-lo. Isso pode ser feito usando um comando da CLI do Jenkins ou fazendo uma solicitação HTTP POST com os parâmetros apropriados. Recomendamos o uso da interface SSH para executar o linter. Consulte a documentação da CLI do Jenkins para obter detalhes sobre como configurar o Jenkins para acesso seguro à linha de comando.
Linting via CLI com 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 usando 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
Exemplos
Abaixo estão dois exemplos do Pipeline Linter em ação. Este primeiro exemplo mostra a saída do linter quando é passado um inválido
Jenkinsfile
, que está faltando parte da agent
declaração.
Jenkinsfile
pipeline {
agent
stages {
stage ('Initialize') {
steps {
echo 'Placeholder.'
}
}
}
}
Saída de linter para Jenkinsfile inválido
# 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 }
^
Neste segundo exemplo, o Jenkinsfile
foi atualizado para incluir a falta any
de agent
. O linter agora relata que o Pipeline é válido.
Jenkinsfile
pipeline {
agent any
stages {
stage ('Initialize') {
steps {
echo 'Placeholder.'
}
}
}
}
Saída de linter para Jenkinsfile válido
ssh -p 8675 localhost declarative-linter < ./Jenkinsfile
Jenkinsfile successfully validated.
java -jar jenkins-cli.jar [-s JENKINS_URL] [global options...] command [command options...] [arguments...]