การเน้นไวยากรณ์ Jenkinsfile ในโครงการ Java โดยใช้ Intellij Idea


107

เราได้ลองใช้แนวทางตามรายการด้านล่างแล้ว:

หลังจากค้นหาเว็บเป็นเวลาหลายชั่วโมงในหลายวันเรายังไม่พบแหล่งข้อมูลที่เป็นประโยชน์ในเรื่องนี้ ดังนั้นจึงเป็นเรื่องที่สมเหตุสมผลที่จะถามคำถามใหม่ที่นี่

เรากำลังพัฒนาโปรเจ็กต์ Java ของเราในแนวคิด IntelliJ และต้องการรวมงานสร้างของเรากับ Jenkins เมื่อเราสร้าง Jenkinsfile ใน Idea เราจะไม่ได้รับการเน้นไวยากรณ์หรือการเติมข้อความอัตโนมัติ เนื่องจากเรายังใหม่กับ Jenkins คุณสมบัติเหล่านี้จะมีประโยชน์กับเรามาก เราจะทำให้ Idea สนับสนุน Jenkinsfiles มากขึ้นได้อย่างไร

หากไม่มีวิธีรับการเน้นไวยากรณ์และการเติมข้อความอัตโนมัติสำหรับ Jenkinsfile ในความคิดตัวแก้ไขอื่น ๆ จะเป็นประโยชน์อะไร

โปรดทราบ:

  • เรากำลังทำงานกับโปรเจ็กต์ Java ไม่ใช่โปรเจ็กต์ที่น่าสนใจ
  • เราได้พยายามแล้วปลั๊กอินhttps://github.com/oliverlockwood/jenkinsfile-idea-plugin เมื่อเปิดใช้งานปลั๊กอิน Jenkinsfile จะได้รับการยอมรับในลักษณะนี้ แต่แทนที่จะเน้นไวยากรณ์เราได้รับข้อความแสดงข้อผิดพลาดโปรดดูด้านล่าง

    pipeline {
    agent { docker 'maven:3.3.3' }
    stages {
        stage('build') {
            steps {
                sh 'echo Hello, World!'
            }
        }
      }
    }
    

    Idea เน้นให้ 'p' ของ 'pipeline' เป็นข้อผิดพลาด ข้อความแสดงข้อผิดพลาดอ่าน:

    คาดว่าจะมี JenkinsTokenType.COMMENT, JenkinsTokenType.CRLF หรือ JenkinsTokenType.STEP_KEY มี 'p'

ขอบคุณสำหรับความช่วยเหลือ!


มีปลั๊กอินที่กำหนดเอง: plugins.jetbrains.com/plugin/10127-jenkinsfile-idea-pluginและคำขอคุณสมบัติ: youtrack.jetbrains.com/issue/IDEA-158104
y.bedrov

@ y.bedrov ขอบคุณสำหรับความคิดเห็นของคุณ เราได้ลองใช้ปลั๊กอินที่ระบุแล้ว แต่ได้รับข้อความแสดงข้อผิดพลาด แต่ไม่มีการเน้นไวยากรณ์หรือการเติมข้อความอัตโนมัติ ประสบการณ์ของคุณเกี่ยวกับปลั๊กอินนี้ได้ผลกับคุณอย่างไร
rexford

1
ฉันไม่รู้ว่าทำไมคุณถึงต้องมีปลั๊กอินสำหรับสิ่งพื้นฐานนี้ เพียงเพิ่ม "Jenkinsfile" เป็นประเภทไฟล์สำหรับ Groovy (การตั้งค่า> ตัวแก้ไข> ประเภทไฟล์> Groovy และเพิ่ม "Jenkinsfile" เป็น "รูปแบบที่ลงทะเบียน") มีอะไรหายไปหลังจากการตั้งค่านั้น
ทอม

1
@ ทอมขอบคุณ! อันที่จริงความคิดเห็นของคุณเกี่ยวกับสิ่งที่เรากำลังมองหา โปรดให้ข้อมูลนี้เป็นคำตอบและฉันจะยอมรับว่าเป็นคำตอบที่ถูกต้อง / เป็นประโยชน์ที่สุด
rexford

2
@Tom สิ่งที่ขาดหายไปคือการเติมข้อความอัตโนมัติและการตรวจสอบความถูกต้องของ Jenkins DSL จริง
OrangeDog

คำตอบ:


237

หากคุณต้องการให้ IDEA จดจำ Jenkinsfile เป็นไฟล์ Groovy คุณสามารถเพิ่ม String "Jenkinsfile" เป็นรูปแบบชื่อไฟล์ที่ถูกต้อง (โดยปกติจะมีนามสกุลไฟล์) สำหรับไฟล์ Groovy สิ่งนี้ได้รับการสนับสนุน "นอกกรอบ" โดยไม่ต้องใช้ Plugin เพิ่มเติมใด ๆ (ยกเว้นปลั๊กอิน "Groovy" แต่เป็นส่วนหนึ่งของ IDEA แล้ว)

โดยไปที่เมนูการตั้งค่าเปิดรายการ "ตัวแก้ไข" และ "ประเภทไฟล์" ตอนนี้เลือก "Groovy" ในรายการด้านบนและเพิ่ม "Jenkinsfile" คุณยังสามารถใช้ regex เช่น "Jenkinsfile *" ได้หากคุณต้องการยืดหยุ่นมากขึ้นเกี่ยวกับไฟล์เสริมที่ลงท้ายด้วย Jenkinsfile
การตั้งค่าควรมีลักษณะดังนี้: การตั้งค่าประเภทไฟล์ IDEA

ตอนนี้ตัวอย่างของคุณมีลักษณะเช่นนี้ใน IDEA (พร้อมกับธีม Dracula): เน้นไวยากรณ์ Jenkinsfile

ดังนั้น IDEA จึงมีการเน้นไวยากรณ์และการเติมข้อความอัตโนมัติเท่าที่ฉันสามารถบอกได้ มันแนะนำชื่อฟังก์ชัน / วิธีการที่มีอยู่ขณะเขียน แต่ฉันไม่ใช่ผู้พัฒนา Groovy ดังนั้นฉันจึงไม่สามารถบอกได้ว่าคำแนะนำบางอย่างหายไป


6
คุณสมบัติที่ผู้คนจะต้องการรวมถึงการตรวจสอบ / การเติมข้อความอัตโนมัติ / quickdocs สำหรับGDSLและบูรณาการlinter ปลั๊กอินที่เหมาะจะทำให้ทุกอย่าง "ใช้งานได้" โดยมีการกำหนดค่าเพียงเล็กน้อย (เช่นเพียงแค่ชี้ไปที่อินสแตนซ์ของเจนกินส์)
OrangeDog

2
โปรดทราบว่าประเภทไฟล์ groovy มีเฉพาะในสตูดิโอ InteliJ และ Android เท่านั้นไม่ใช่ใน PyCharm 2018.3.2 ฉันคิดว่าเพราะปลั๊กอินนี้จำเป็นต้องใช้plugins.jetbrains.com/plugin/1524-jetgroovy
Ming

ลองดาวน์โหลดไฟล์ gdsl จากอินสแตนซ์ Jenkins ของคุณที่ https: // <Jenkins> / job / <Job Name> / pipeline-syntax / gdsl และใส่ลงในคลาสพา ธ Groovy ของโปรเจ็กต์ของคุณ
Stephan

2
นี่เป็นความคิดที่ดี แต่ต้องมีการกำหนดค่า Groovy SDK
owensmartin

1
ยอดเยี่ยม! ขอบคุณมาก ๆ! ฉันสามารถกำหนดไฟล์ Jenkinsfile.declarative ของเราใหม่ในลักษณะเดียวกันเพื่อให้เราได้รับทั้งการเน้นไวยากรณ์และการเติมโค้ด สำหรับเรา*.declarativeถูกกำหนดให้เป็นประเภทไฟล์ข้อความ
icfantv

9

อีกตัวเลือกหนึ่งคือการใช้ shabang ที่ด้านบนของ Jenkinsfile #!/usr/bin/env groovyเช่นนี้ นอกจากนี้คุณสามารถลองใช้ gdsl: https://st-g.de/2016/08/jenkins-pipeline-autocompletion-in-intellij แต่จนถึงขณะนี้ยังไม่รองรับไปป์ไลน์ที่เปิดเผย: https: //issues.jenkins-ci .org / เรียกดู / JENKINS-40127


2

ถ้าคุณเพิ่ม

#!groovy​

ส่วนหัวไปยัง jenkinsfile ของคุณคุณควรได้รับการเน้นไวยากรณ์ที่น่าสนใจใน IDE


ใน intellij มันใช้ไม่ได้และคำตอบนี้คลุมเครือเกินไปโดยทั่วไป
Tomer Gal

2

ในที่สุดเราก็พบโซลูชันที่เหมาะกับเราและให้การเน้นไวยากรณ์และการเติมโค้ดสำหรับ Jenkinsfile ที่มีอยู่ในโครงการ Java ปกติใน Idea การแก้ปัญหาจะนำมาจากที่นี่ , ที่นี่ (และจากการทดลองส่วนบุคคลเพิ่มเติม / วิจัย)

  1. ดาวน์โหลด Groovy SDK (หากคุณยังไม่ได้ดำเนินการ) จากGroovy Pageและกำหนดค่าบนโปรเจ็กต์ Java ของคุณ สำหรับความช่วยเหลือเกี่ยวกับเรื่องนี้โปรดดูที่นี่

  2. ดาวน์โหลดไฟล์ GDSL ไปป์ไลน์จากอินสแตนซ์ Jenkins ของคุณซึ่งควรมีอยู่ในลิงค์เช่นhttps: //yourJenkinsInstance.tld/pipeline-syntax/gdslและเพิ่มลงใน classpath ของโปรเจ็กต์ Java ของคุณ เช่นการสร้างโฟลเดอร์ใหม่ src / main / jenkins วางไฟล์ pipeline gdsl ไว้ที่นั่นแล้วทำเครื่องหมายโฟลเดอร์ว่าเป็น source root ใน IntelliJ Idea

  3. เพิ่ม "Jenkinsfile" เป็นรูปแบบชื่อไฟล์ที่ถูกต้องสำหรับไฟล์ groovy ตามที่อธิบายไว้ที่นี่

  4. เพื่อหลีกเลี่ยงข้อความแสดงข้อผิดพลาด'node' cannot be applied to '(groovy.lang.Closure<java.lang.Object>)คุณสามารถเพิ่มบรรทัดนี้ที่ด้านบนของ Jenkinsfile ของคุณ:

    // noinspection GroovyAssignabilityCheck


1

เมื่อดูที่ซอร์สโค้ดดูเหมือนว่า COMMENTS จะไม่ได้กำหนดไว้ (มีการแสดงความคิดเห็นไว้ในโค้ด)

STEP_KEY ถูกกำหนดให้เป็น: STEP_NAME = "sh" | "ขนาน"

ฉันไม่แน่ใจว่าปลั๊กอินทำอะไรได้มากกว่านี้และยังไม่ได้รับการอัปเดตภายใน 2 ปี


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