Apakah ada alat yang memungkinkan untuk memvalidasi Jenkinsfiles online?


13

Saat ini saya sedang mengedit Jenkinsfile dan kemudian membiarkannya berjalan kecuali Jenkins melaporkan masalah. Pendekatan ini menghabiskan banyak waktu. Saya lebih suka memvalidasi sintaks sebelum melakukan Jenkinsfile. Apakah ada alat yang memecahkan masalah ini?

Di gitlab terdapat URI, yaitu /ci/lintyang memungkinkan untuk mengirimkan file gitlab, klik tombol centang dan kemudian UI akan menunjukkan apakah sintaksinya benar atau tidak.

Jawaban:


13

Berikut adalah beberapa dokumentasi tentang linter pipa Jenkins dan perintahnya. Apakah Anda perlu memvalidasi sebelum komit? Jika tidak, itu akan sangat sepele untuk menjalankan perintah linting sebelum pipeline Anda berjalan, dan cukup gagal jika tidak lulus.

Dari Command-line Pipeline Linter :

Jenkins dapat memvalidasi, atau " lint ", sebuah Declarative Pipeline dari baris perintah sebelum benar-benar menjalankannya. Ini dapat dilakukan dengan menggunakan perintah Jenkins CLI atau dengan membuat permintaan HTTP POST dengan parameter yang sesuai. Kami merekomendasikan menggunakan antarmuka SSH untuk menjalankan linter. Lihat dokumentasi Jenkins CLI untuk detail tentang cara mengkonfigurasi Jenkins dengan benar untuk akses baris perintah yang aman.

Linting via CLI dengan 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 melalui HTTP POST using 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

Contohnya

Di bawah ini adalah dua contoh Pipeline Linter yang sedang beraksi. Contoh pertama ini menunjukkan output dari linter ketika dilewatkan tidak valid Jenkinsfile, yang hilang bagian dari agentdeklarasi.

Jenkinsfile

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

Keluaran linter untuk Jenkinsfile tidak valid

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

Dalam contoh kedua ini, Jenkinsfiletelah diperbarui untuk memasukkan yang hilang anypada agent. Linter sekarang melaporkan bahwa Pipeline itu valid.

Jenkinsfile

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

Keluaran linter untuk Jenkinsfile yang valid

ssh -p 8675 localhost declarative-linter < ./Jenkinsfile
Jenkinsfile successfully validated.

Bisakah Anda menjelaskan cara menggunakan klien secara lokal? java -jar jenkins-cli.jar [-s JENKINS_URL] [global options...] command [command options...] [arguments...]
030


Terima kasih telah mengirim jawaban. Apakah ada alat online juga? Akan lebih bagus jika seseorang dapat menavigasi ke UI, memposting jenkinsfile dan memeriksa apakah ada masalah sintaksis. Saya telah memperbarui pertanyaan.
030

@ 030 Saya ragu ada alat linter online, tapi sepertinya ini proyek yang menyenangkan :) Untuk menggunakan linter secara lokal, Anda harus masuk ke server Jenkins dengan kredensial Anda, lalu "minta" Jenkins untuk membohongi Anda jenkinsfile. pierre-beitz.eu/2017/01/17/...
PrestonM

Bisakah Anda menambahkan beberapa cuplikan dari tautan itu ke jawaban ini. Jika tautannya sudah usang, informasi itu akan hilang.
030
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.