การเขียนไฟล์ Yaml ในไปป์ไลน์ที่เขียนสคริปต์ของ Jenkins

ฉันมีไฟล์ yaml ซึ่งเป็นจุดเริ่มต้นของการทดสอบประสิทธิภาพ Neoload script-as-code

name: TestFile
servers:
- name: myserver
  host: myhost.world.com
  scheme: https

ฉันต้องการให้ Jenkins สร้างไฟล์ yaml ตามตัวแปรจากขั้นตอน/ไปป์ไลน์ก่อนหน้า ฉันเคยเห็น writeYaml สามารถทำสิ่งที่ฉันต้องการได้ และดูเหมือนว่าจะใช้งานได้ค่อนข้างง่าย นี่คือสิ่งที่ฉันมีจนถึงตอนนี้

script{
    def map = ['name':'TestFile]
    map.put('name','myserver')
    writeYaml, file: filename, data: map
}

def ทำงานได้ดี แต่ฉันไม่สามารถเข้าใจไวยากรณ์เพื่อเพิ่มส่วน 'เซิร์ฟเวอร์' ให้กับวัตถุแผนที่ได้ จากสิ่งที่ฉันมีข้างต้น ฉันจึงได้ชื่อ: myserver ในไฟล์

ฉันพยายามแล้ว

map.put("servers", new String[] {"name","myserver"})

แต่มันไม่ได้คอมไพล์ (โทเค็น "ชื่อ" ที่ไม่คาดคิด) ฉันคิดว่าเพราะฉันพยายามใช้ภาษาที่ผิดในไปป์ไลน์ที่มีสคริปต์

ฉันขอขอบคุณที่ฉันสามารถเทียบเท่ากับ 'เขียนบรรทัด' กับไฟล์เพื่อสร้าง YAML ได้ แต่ไฟล์นี้จะซับซ้อนกว่านี้มากดังนั้นฉันจึงต้องการใช้วิธีการแบบอิงวัตถุนี้


person Slimy43    schedule 26.02.2020    source แหล่งที่มา
comment
คุณไม่พลาดเครื่องหมายอะพอสทรอฟีใน def map = ['name':'TestFile] ใช่ไหม คุณลอง def map = ['name':'TestFile'] แทนได้ไหม   -  person sumid    schedule 09.06.2021


คำตอบ (1)


ด้วยแผนที่ Groovy ที่มีอยู่ซึ่งมีคู่คีย์-ค่าเป็น ['name': 'TestFile] คุณสามารถเพิ่มคีย์และค่าให้กับแผนที่นี้ในรูปแบบที่แตกต่างกันได้

หากต้องการสร้าง YAML ที่คุณต้องการ คุณจะต้องมีคีย์เพิ่มเติม servers พร้อมด้วยอาร์เรย์องค์ประกอบเดียว (- หมายถึงประเภทอาร์เรย์ใน YAML) องค์ประกอบสมาชิกของอาร์เรย์นั้นควรเป็นแผนที่อื่นที่มีคู่ค่าคีย์ทั้งหมดของคุณ

คุณจะต้องการผนวก ['servers': [['name': 'myserver', 'host': 'myhost.world.com', 'scheme': 'https']]] เข้ากับแผนที่ของคุณ มี [] สามรายการในรูปแบบนั้น อันที่หนึ่งและอันที่สามหมายถึงแผนที่ และอันที่สองหมายถึงรายการ servers คือคีย์ในแผนที่แรกของคุณ และค่าคือรายการ องค์ประกอบเดียวของรายการคือการแมปคู่ค่าคีย์ คู่ค่าคีย์สามคู่ประกอบเป็นแผนที่ในองค์ประกอบรายการนั้น

ด้วยไวยากรณ์ทั่วไปสองแบบสำหรับการผนวกคู่ค่าคีย์เข้ากับแผนที่ คุณสามารถดำเนินการอย่างใดอย่างหนึ่งต่อไปนี้

map['servers'] = [['name': 'myserver', 'host': 'myhost.world.com', 'scheme': 'https']]

or

map.servers = [['name': 'myserver', 'host': 'myhost.world.com', 'scheme': 'https']]

เพื่อให้บรรลุผลตามที่ต้องการ

person Matt Schuchard    schedule 26.02.2020