ฉันมีงานสองงานในเจนกินส์ซึ่งทั้งสองงานต้องการพารามิเตอร์เดียวกัน
ฉันจะรันงานแรกด้วยพารามิเตอร์ได้อย่างไรเพื่อที่เมื่อเรียกใช้งานที่สองจะใช้พารามิเตอร์เดียวกัน
ฉันมีงานสองงานในเจนกินส์ซึ่งทั้งสองงานต้องการพารามิเตอร์เดียวกัน
ฉันจะรันงานแรกด้วยพารามิเตอร์ได้อย่างไรเพื่อที่เมื่อเรียกใช้งานที่สองจะใช้พารามิเตอร์เดียวกัน
คำตอบ:
คุณสามารถใช้Parameterized Trigger Pluginซึ่งจะช่วยให้คุณส่งผ่านพารามิเตอร์จากงานหนึ่งไปยังอีกงานหนึ่งได้
คุณต้องเพิ่มพารามิเตอร์นี้ที่คุณส่งผ่านจากต้นน้ำในปลายน้ำ
1. การดำเนินการหลังการสร้าง> เลือก” ทริกเกอร์สร้างพารามิเตอร์ที่สร้างขึ้นในโครงการอื่น ๆ ”
2. ป้อนตัวแปรสภาพแวดล้อมด้วยค่า Value สามารถเป็น Jenkins Build Parameters ได้
สามารถดูขั้นตอนโดยละเอียดได้ที่นี่: -
หวังว่าจะเป็นประโยชน์ :)
คำตอบที่ได้รับการยอมรับที่นี่ไม่ทำงานสำหรับกรณีการใช้งานของฉัน ฉันจำเป็นต้องสามารถสร้างพารามิเตอร์แบบไดนามิกในงานหนึ่งและส่งต่อไปยังอีกงานหนึ่ง ดังที่Mark McKennaกล่าวถึงดูเหมือนจะไม่มีวิธีใดที่จะส่งออกตัวแปรจากขั้นตอนการสร้างเชลล์ไปยังการดำเนินการสร้างโพสต์
ฉันประสบความสำเร็จในการแก้ปัญหาโดยใช้Parameterized Trigger Pluginโดยการเขียนค่าลงในไฟล์และใช้ไฟล์นั้นเป็นพารามิเตอร์เพื่อนำเข้าผ่าน 'Add post-build action' -> 'Trigger parameterized build ... ' จากนั้นเลือก 'Add Parameters' - > 'พารามิเตอร์จากไฟล์คุณสมบัติ'
ฉันคิดว่าคำตอบข้างต้นต้องการการอัปเดต:
ฉันพยายามสร้างไดเร็กทอรีไดนามิกเพื่อเก็บสิ่งประดิษฐ์บิวด์อัพสตรีมดังนั้นฉันจึงต้องการส่งต่อหมายเลขบิวด์งานอัพสตรีมไปยังงานดาวน์สตรีมฉันลองทำตามขั้นตอนข้างต้นแล้ว แต่ไม่สามารถใช้งานได้ นี่คือวิธีการทำงาน:
เนื่องจากเจนกินส์เวอร์ชันใหม่ต้องการให้คุณกำหนดตัวแปรในงานดาวน์สตรีมด้วย ฉันหวังว่ามันจะเป็นประโยชน์
(สำหรับเพื่อน Googler)
หากคุณกำลังสร้างไปป์ไลน์ที่จริงจังด้วยBuild Flow Pluginคุณสามารถส่งผ่านพารามิเตอร์ระหว่างงานด้วย DSL ดังนี้:
สมมติว่ามีสตริงพารามิเตอร์ "CVS_TAG" เพื่อส่งต่อไปยังงานอื่น ๆ :
build("pipeline_begin", CVS_TAG: params['CVS_TAG'])
parallel (
// will be scheduled in parallel.
{ build("pipeline_static_analysis", CVS_TAG: params['CVS_TAG']) },
{ build("pipeline_nonreg", CVS_TAG: params['CVS_TAG']) }
)
// will be triggered after previous jobs complete
build("pipeline_end", CVS_TAG: params['CVS_TAG'])
คำแนะนำสำหรับการแสดงตัวแปร / พารามิเตอร์ที่มี:
// output values
out.println '------------------------------------'
out.println 'Triggered Parameters Map:'
out.println params
out.println '------------------------------------'
out.println 'Build Object Properties:'
build.properties.each { out.println "$it.key -> $it.value" }
out.println '------------------------------------'
เพียงเพิ่มคำตอบของฉันเพิ่มเติมจาก Nigel Kirby เพราะฉันยังไม่สามารถแสดงความคิดเห็นได้:
ในการส่งผ่านพารามิเตอร์ที่สร้างขึ้นแบบไดนามิกคุณยังสามารถส่งออกตัวแปรในไทล์ 'Execute Shell' แล้วส่งผ่าน 'Trigger parameterized build on other projects' => 'Predefined parameters "=> give' YOUR_VAR = $ YOUR_VAR ' ทีมของฉันใช้คุณลักษณะนี้เพื่อส่งผ่านเวอร์ชันแพ็กเกจ npm จากงานสร้างไปจนถึงงานการปรับใช้
อัปเดต: ด้านบนใช้ได้กับพารามิเตอร์ที่ฉีดเจนกินส์เท่านั้นพารามิเตอร์ที่สร้างจากเชลล์ยังคงต้องใช้วิธีการเดียวกัน เช่น. echo YOUR_VAR = $ {YOUR_VAR}> variable.properties และส่งไฟล์นั้นไปที่ดาวน์สตรีม
ฉันประสบปัญหาเดียวกันเมื่อฉันต้องส่งรุ่นปอมไปที่งาน Rundeck ขั้นปลาย
สิ่งที่ฉันทำคือใช้การแทรกพารามิเตอร์ผ่านไฟล์คุณสมบัติดังนี้:
1) การสร้างคุณสมบัติในไฟล์คุณสมบัติผ่านเชลล์:
สร้างการกระทำ:
เช่นนิยามคุณสมบัติ
2) การส่งผ่านคุณสมบัติที่กำหนดไปยังงานดาวน์สตรีม: โพสต์การดำเนินการสร้าง:
เช่นคุณสมบัติการส่ง
3) เป็นไปได้ที่จะใช้ $ POM_VERSION ในงาน Downstream Rundeck
/! \ Jenkins เวอร์ชัน: 1.636.0
/! \ ด้วยเหตุผลบางประการในการสร้างบิลด์ที่ถูกทริกเกอร์จำเป็นต้องเพิ่มตัวเลือก 'พารามิเตอร์การสร้างปัจจุบัน' เพื่อส่งผ่านคุณสมบัติ
เมื่ออ่านคำตอบฉันไม่เห็นตัวเลือกอื่นที่ฉันชอบก็จะเสนอให้เช่นกัน ฉันชอบการกำหนดพารามิเตอร์ของงาน แต่ก็ไม่ได้ปรับขนาดได้ดีเสมอไป หากคุณมีงานที่ไม่ได้อยู่ปลายน้ำของงานแรกโดยตรง แต่อยู่ไกลออกไปจากท่อคุณไม่ต้องการกำหนดพารามิเตอร์ทุกงานในไปป์ไลน์เพื่อให้สามารถส่งผ่านพารามิเตอร์ไปได้ตลอดทาง หรือถ้าคุณมีพารามิเตอร์จำนวนมากที่ใช้โดยงานอื่น ๆ (โดยเฉพาะพารามิเตอร์ที่ไม่จำเป็นต้องเชื่อมโยงกับงานหลักหรืองานหลัก) การกำหนดพารามิเตอร์อีกครั้งจะไม่ทำงาน
ในกรณีเหล่านี้ฉันชอบที่จะส่งออกค่าไปยังไฟล์คุณสมบัติแล้วฉีดสิ่งนั้นในงานใด ๆ ที่ฉันต้องการโดยใช้ปลั๊กอินEnvInject สิ่งนี้สามารถทำได้แบบไดนามิกซึ่งเป็นอีกวิธีหนึ่งในการแก้ปัญหาจากคำตอบอื่นข้างต้นซึ่งยังคงใช้งานแบบกำหนดพารามิเตอร์ โซลูชันนี้ปรับขนาดได้ดีในหลายสถานการณ์
ฉันคิดออกแล้ว!
ด้วยการลองผิดลองถูกเกือบ 2 ชั่วโมงฉันก็คิดออก
สิ่งนี้ใช้ได้ผลและเป็นสิ่งที่คุณทำเพื่อส่งผ่านตัวแปรไปยังงานระยะไกล:
def handle = triggerRemoteJob(remoteJenkinsName: 'remoteJenkins', job: 'RemoteJob' paramters: "param1=${env.PARAM1}\nparam2=${env.param2}")
ใช้ \ n เพื่อแยกพารามิเตอร์สองตัวโดยไม่มีช่องว่าง ..
ตรงข้ามกับพารามิเตอร์: '' 'someparams' ''
เราใช้พารามิเตอร์: "someparams"
"... " คือสิ่งที่ทำให้เราได้รับค่าของตัวแปรที่ต้องการ (นี่คือเครื่องหมายคำพูดคู่ไม่ใช่สองคำพูดเดี่ยว)
'' '... ' '' หรือ '... ' จะไม่ได้รับค่าเหล่านั้นมาให้เรา (สามคำพูดเดียวหรือเพียงคำพูดเดียว)
พารามิเตอร์ทั้งหมดที่นี่ถูกกำหนดในสภาพแวดล้อม {} บล็อกที่จุดเริ่มต้นของไปป์ไลน์และได้รับการแก้ไขในขั้นตอน> ขั้นตอน> สคริปต์เมื่อจำเป็น
ฉันยังทดสอบและพบว่าเมื่อคุณใช้ "... " คุณไม่สามารถใช้บางอย่างเช่น '' '... "... "' '' หรือ "... '..'... " หรือการรวมกันของ มัน...
สิ่งที่จับได้คือเมื่อคุณใช้ "... " ในส่วนพารามิเตอร์คุณไม่สามารถส่งผ่านพารามิเตอร์สตริงได้ ตัวอย่างเช่นสิ่งนี้จะไม่ทำงาน:
def handle = triggerRemoteJob(remoteJenkinsName: 'remoteJenkins', job: 'RemoteJob' paramters: "param1=${env.PARAM1}\nparam2='param2'")
หากคุณต้องการส่งผ่านสิ่งที่ต้องการข้างต้นคุณจะต้องตั้งค่าตัวแปรสภาพแวดล้อม param2 = 'param2' จากนั้นใช้ $ {env.param2} ในส่วนพารามิเตอร์ของขั้นตอนปลั๊กอินทริกเกอร์ระยะไกล