Existe uma ferramenta que permita validar o Jenkinsfiles online?

13

No momento, estou editando um arquivo Jenkins e o deixo executar, a menos que Jenkins relate um problema. Essa abordagem custa muito tempo. Prefiro validar a sintaxe antes de confirmar o arquivo Jenkins. Existe uma ferramenta que resolve esse problema?

No gitlab, existe um URI, ou seja, /ci/lintque possibilita o envio de um arquivo gitlab, clique no botão de verificação e a interface do usuário indicará se a sintaxe está correta ou não.

030
fonte

Respostas:

13

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.

No linha de comando Pipeline Linter :

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 agentdeclaraçã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 &#125;
   ^

Neste segundo exemplo, o Jenkinsfilefoi atualizado para incluir a falta anyde 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.
PrestonM
fonte
Você poderia explicar como usar o cliente localmente? java -jar jenkins-cli.jar [-s JENKINS_URL] [global options...] command [command options...] [arguments...]
030
Obrigado por postar uma resposta. Existe uma ferramenta online também? Seria ótimo se alguém pudesse navegar para uma interface do usuário, publicar um arquivo jenkins e verificar se há problemas de sintaxe. Eu atualizei a pergunta.
030
@ 030 Duvido que exista uma ferramenta de linter on-line, mas parece um projeto divertido: :) Para usar o linter localmente, é necessário fazer login no servidor Jenkins com suas credenciais e depois "pedir" a Jenkins jenkinsfile. Você
está em
Você pode adicionar alguns trechos desse link a esta resposta. Se o link estiver obsoleto, as informações desaparecerão.
030