มีเครื่องมือที่ทำให้สามารถตรวจสอบ Jenkinsfiles ออนไลน์ได้หรือไม่?


13

ในขณะนี้ฉันกำลังแก้ไขไฟล์เจนกินส์แล้วปล่อยให้มันรันจนกว่าเจนกินส์จะรายงานปัญหา วิธีนี้มีค่าใช้จ่ายมาก ฉันชอบที่จะตรวจสอบไวยากรณ์ก่อนที่จะยอมรับ Jenkinsfile มีเครื่องมือที่ช่วยแก้ปัญหานี้หรือไม่?

ในgitlabมี URI นั่นคือ/ci/lintทำให้สามารถส่งไฟล์ gitlab ได้โดยคลิกที่ปุ่มตรวจสอบจากนั้น UI จะระบุว่าไวยากรณ์นั้นถูกต้องหรือไม่

คำตอบ:


13

นี่คือเอกสารบางส่วนเกี่ยวกับการวางท่อส่งของเจนกินส์และคำสั่ง คุณจำเป็นต้องตรวจสอบก่อนที่จะส่งมอบหรือไม่? หากไม่เป็นเช่นนั้นจะเป็นเรื่องเล็กน้อยที่จะรันคำสั่ง linting ก่อนที่ไพพ์ไลน์ของคุณจะทำงานและจะล้มเหลวหากไม่ผ่าน

จากLinter ไปป์ไลน์บรรทัดคำสั่ง :

Jenkins สามารถตรวจสอบหรือ " lint " Pipeline Declarative จากบรรทัดคำสั่งก่อนที่จะรันจริง สิ่งนี้สามารถทำได้โดยใช้คำสั่ง Jenkins CLI หรือทำการร้องขอ HTTP POST พร้อมพารามิเตอร์ที่เหมาะสม เราแนะนำให้ใช้อินเตอร์เฟส SSHเพื่อเรียกใช้ linter ดูเอกสารประกอบของJenkins CLIสำหรับรายละเอียดเกี่ยวกับวิธีกำหนดค่า Jenkins อย่างเหมาะสมสำหรับการเข้าถึงบรรทัดคำสั่งอย่างปลอดภัย

ผ้าสำลีผ่าน CLI ด้วย 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

ใช้ผ้าสำลีผ่าน HTTP POST โดยใช้ 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

ตัวอย่าง

ด้านล่างนี้เป็นตัวอย่างการใช้งาน Pipinter Linter ตัวอย่างแรกนี้แสดงเอาท์พุทของ linter เมื่อมันผ่านการไม่ถูกต้อง Jenkinsfileหนึ่งที่ขาดหายไปเป็นส่วนหนึ่งของการagentประกาศ

Jenkinsfile

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

เอาต์พุต Linter สำหรับ 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;
   ^

ในตัวอย่างที่สองนี้Jenkinsfileได้รับการปรับปรุงรวมถึงการขาดหายไปในany agentตอนนี้ linter รายงานว่า Pipeline นั้นถูกต้อง

Jenkinsfile

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

เอาต์พุต Linter สำหรับ Jenkinsfile ที่ถูกต้อง

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

คุณสามารถอธิบายวิธีใช้งานเครื่องลูกข่ายได้อย่างไร java -jar jenkins-cli.jar [-s JENKINS_URL] [global options...] command [command options...] [arguments...]
030


ขอบคุณสำหรับการโพสต์คำตอบ มีเครื่องมือออนไลน์เช่นกัน? มันจะดีถ้ามีใครสามารถนำทางไปยัง UI โพสต์ไฟล์เจนกินส์และตรวจสอบว่ามีปัญหาเกี่ยวกับไวยากรณ์หรือไม่ ฉันได้อัปเดตคำถามแล้ว
030

@ 030 ฉันสงสัยว่ามีเครื่องมือ linter ออนไลน์ แต่ดูเหมือนว่าโครงการสนุก ๆ ที่จะทำ :) การใช้ linter ในเครื่องคุณต้องลงชื่อเข้าใช้เซิร์ฟเวอร์ Jenkins ด้วยข้อมูลประจำตัวของคุณจากนั้น "ถาม" Jenkins เพื่อขยี้คุณ jenkinsfile pierre-beitz.eu/2017/01/17/…
PrestonM

คุณสามารถเพิ่มเกร็ดเล็กเกร็ดน้อยจากลิงก์ไปยังคำตอบนี้ได้ไหม หากลิงก์เลิกใช้งานข้อมูลจะหายไป
030
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.