ตัวแปรที่ผ่านมาจะส่งไฟล์ groovy


9

ฉันกำลังจัดการงานจำนวนมากในเจนกินส์โดยปลั๊กอิน DSL ปลั๊กอินนั้นใช้คำจำกัดความ. govov ดังนั้นฉันคิดว่าถึงแม้บางคนไม่ได้ใช้ Jenkins แต่การใช้ Groovy อาจช่วยได้

โดยทั่วไปฉันต้องการสร้างไฟล์เพิ่มเติมซึ่งอาจเป็นไฟล์ Groovy, JSON หรือ YAML ไม่ว่าจะเป็นอะไรก็ตาม สิ่งสำคัญคือความเป็นไปได้ในการเชื่อมต่อไฟล์นั้นด้วยไฟล์. groovy ของฉัน

ในไฟล์นั้นฉันกำลังกำหนดตัวแปร (แทนที่จะเป็นแค่สตริง) เช่น IP address หรือสิ่งอื่น ๆ เช่น

ip_gitlab: 1.2.3.4
default_user: admin

ในไฟล์ Groovy ของฉันฉันต้องการใช้ตัวแปรเหล่านี้

วิธีการนั้นเป็นไปได้หรือเปล่า?


แน่นอนว่าเป็นไปได้ ตัวอย่างเช่นมีgroovy-lang.org/json.html
smelm

หากเป็นไปได้ที่จะกำหนด classpath เพิ่มเติมในปลั๊กอิน DSL แล้วใส่ลงในโฟลเดอร์ที่คุณจะเพิ่มไฟล์ classpath Groovy (s) class GLOBAL{ def a=111; def b=222; }เช่น จากนั้นในรหัสคุณควรจะสามารถเข้าถึงได้GLOBAL.a
daggett

@daggett ฉันพยายามตามที่คุณเขียนและฉันมักจะมีข้อผิดพลาด: org.codehaus.groovy.runtime.typehandling.GroovyCastException: Cannot cast object 'org.codehaus.groovy.runtime.InvokerHelper$1@641eff69' with class 'org.codehaus.groovy.runtime.InvokerHelper$1' to class 'javaposse.jobdsl.dsl.JobParent' ข้อผิดพลาดนี้เกิดขึ้นระหว่างการประมวลผลระดับ GLOBAL ของคุณ
rafal1337

ฉันลืม . สำหรับตัวแปรที่กำหนดไว้แต่ละรายการควรมีstaticคำนำหน้า class GLOBAL{ static def a=111; static def b=222; }. แต่ข้อผิดพลาดที่คุณมีนั้นแปลก คุณสามารถแสดงตัวแปรที่คุณประกาศและวิธีใช้ใน dsl
daggett

1. การกำหนดค่าของฉันสำหรับ dsl postimg.cc/TLHK5k6h 2. ข้อผิดพลาดระหว่างการประมวลผล dsl postimg.cc/21F37jDs
rafal1337

คำตอบ:


3

ฉันแนะนำให้ใช้ไฟล์คุณสมบัติตามที่ @JBaruch เขียน

ip_gitlab=1.2.3.4
default_user=admin

และโหลดมัน

Properties properties = new Properties()
File propertiesFile = new File('test.properties')
propertiesFile.withInputStream {
    properties.load(it)
}

จากนั้นคุณสามารถใช้มันรับไอพีตัวอย่างเช่น

def ipPropertyName= 'ip_gitlab'
properties."$ipPropertyName"

2
นี่เป็นสำเนาที่ย่อมาจากโพสต์อื่น อย่างน้อยคุณก็ต้องทำตามแนวทางการอ้างอิงและตั้งชื่อผู้แต่ง
Martijn Pieters

โดยไม่ได้ตั้งใจที่ใช้งานไม่ได้กับ Jenkins DSL ไม่สามารถค้นหาไฟล์ที่มีคุณสมบัติได้ แต่ไฟล์นี้เป็นโฟลเดอร์เดียวกัน ...FATAL: test.properties (No such file or directory) java.io.FileNotFoundException: test.properties (No such file or directory)
34945

@ rafal1337 คุณลองใช้ไฟล์บางส่วน / เต็มพา ธ หรือไม่?
user7294900

@ user7294900 ใช่ฉันพยายามหลายเส้นทาง แต่ไม่มีผลในเชิงบวก
rafal1337


2

ทำให้ไฟล์ Groovy loadและกำหนดบางข้อมูลทั่วไปและการใช้งาน

เช่น hello.conf (เขียนโดย groovy)

build_name = 'hello'

build_config = [
    'git': 'your git repository',
    'build_job': ['bulid_a', 'build_b']
]

และใช้งานโดย load

load 'hello.conf'

println(build_name)
for (job in build_config['build_job']) {
    build job: job
}

ดูดี แต่ในปลั๊กอิน DSL ในเจนกิ้นส์ไม่ทำงาน:ERROR: (pipeline.groovy, line 1) No signature of method: pipeline.load() is applicable for argument types: (java.lang.String) values: [a_test.groovy]Possible solutions: job(java.lang.String), find(), folder(java.lang.String), job(java.lang.String, groovy.lang.Closure), find(groovy.lang.Closure), wait()
35526

2

ถ้าคุณต้องการคำตอบเฉพาะของเจนกินส์: มีปลั๊กอินผู้ให้บริการกำหนดค่าปลั๊กอินให้เจนกินส์

คุณสามารถจัดเก็บไฟล์กำหนดค่า / คุณสมบัติผ่านไฟล์ที่มีการจัดการ ไปที่จัดการเจนกินส์> ไฟล์ที่ได้รับการจัดการและสร้างไฟล์ใหม่ รองรับ. groovy, .json, .xml และอื่น ๆ อีกมากมาย

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

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