วิธีการตั้งค่า `killSoftly` สำหรับงาน Jenkins ที่เฉพาะเจาะจง?


11

เจนกิ้นส์บิลด์ของฉันค้างระหว่างขั้นตอนการบิลด์และโพสต์บิลด์

ผลลัพธ์ของคอนโซลแสดงว่ามีการรอ 6 นาที (แต่ฉันได้เห็นการรอถึงหนึ่งชั่วโมง):

10:53:26 BUILD FAILED in 1m 7s
10:53:26 4 actionable tasks: 4 executed
10:53:26 Build step 'Invoke Gradle script' changed build result to FAILURE
10:53:26 Build step 'Invoke Gradle script' marked build as failure
11:09:29 [CucumberReport] Using Cucumber Reports version 4.9.0

ฉันพบนี้และนี้คำถามที่มีปัญหาที่คล้ายกันและพวกเขากล่าวว่าการแก้ปัญหาคือการตั้งค่าใน-DSoftKillWaitSeconds=0jenkins.xml

อย่างไรก็ตามฉันต้องการวิธีการตั้งค่าตัวเลือกสำหรับงานเฉพาะเท่านั้นโดยไม่ยุ่งกับการตั้งค่า Jenkins ทั่วโลก (ฉันไม่ต้องการยุ่งกับโครงการอื่น ๆ )

แก้ไข:

เมื่อฉันยกเลิกงานด้วยตนเองก่อนที่จะทำตามขั้นตอน [CucumberReport] รายงาน Cucumber จะยังคงสร้างขึ้น

ฉันยังตรวจสอบการยกเลิกการสร้างหากยังมีช่องทำเครื่องหมายติดอยู่ในตัวเลือกสภาพแวดล้อมการสร้างโดยใช้กลNo Activityยุทธการหมดเวลาเป็น (หมดเวลาวินาที = 2)

เมื่อฉันสร้างโครงการด้วยการตั้งค่าเหล่านี้บิลด์จะล้มเหลวด้วย "ยกเลิกหลังจาก 0 วินาที" ที่แสดงใน Build History เหมือนเมื่อก่อน แต่เอาต์พุตคอนโซลจะเหมือนกัน (ไม่มีการเปลี่ยนแปลงใด ๆ รายงานแตงกวาจะถูกสร้างขึ้น แต่หลังจากหมดเวลาที่แน่นอน)


คุณต้องการทำอะไรกับพารามิเตอร์ อาจจะมีวิธีแก้ปัญหาที่ง่ายกว่านี้
Michael Kemmerzell

ฉันต้องการลดเวลารอหลังจากขั้นตอนการสร้าง ดังที่คุณเห็นจากคอนโซลเอาต์พุตมีการรอ 6 นาทีระหว่างขั้นตอนการสร้างและขั้นตอนหลังการสร้าง
Mate Mrše

คุณสามารถให้บางส่วนของท่อของคุณ? ฉันสงสัยว่าเจนกินส์ติดอยู่ง่าย - มีอะไรบางอย่างเกิดขึ้นที่นี่
Michael Kemmerzell

คุณสามารถระบุเจาะจงมากขึ้นว่าส่วนใดของท่อส่งที่น่าสนใจเพื่อให้ฉันสามารถแก้ไขและแบ่งปันบางส่วนเพราะฉันไม่สามารถแบ่งปันรหัสจริงได้หรือไม่?
Mate Mrše

คุณตั้งค่าtimeoutตัวเลือกในไพพ์ของคุณไม่ได้เหรอ? คุณควรโพสต์เวอร์ชั่นที่เรียบง่ายของไพพ์ของคุณ มันยากที่จะ "เดา" สิ่งที่อาจผิด นอกจากนี้คำถามนี้น่าจะดีเหมาะที่จะเป็นที่devops.stackexchange.com
tftd

คำตอบ:


4

มันเป็นไปไม่ได้ที่จะเลือกค่าเฉพาะงานสำหรับSoftKillWaitSeconds (ค่านั้นมาจากแกนกลางเจนกินส์ ณจุดที่ไม่ทราบชื่องาน)

คำแนะนำของฉันคือแก้ไขการจัดการแท้งในงานของคุณดังนั้นมันจะไม่ขึ้นอยู่กับ "soft kill timeout" หากคุณกำลังทำงานบนระบบ Unix-ish คุณสามารถมั่นใจได้ว่าการทำงานของคุณในกลุ่มกระบวนการใหม่ (เป็นset -mทุบตี) และ (ตัวอย่าง) ตั้งค่ากับดักทางออกที่เหมาะสม


ตั้งแต่ฉันยังใหม่กับเจนกิ้นส์คุณสามารถขยายใน "การทำงานของคุณในกลุ่มกระบวนการใหม่ (ตั้งค่า -m ใน bash) และ (ตัวอย่าง) ตั้งค่ากับดักทางออกที่เหมาะสม"?
Mate Mrše

เรื่องนี้ไม่เกี่ยวข้องกับเจนกินส์ต่อคน คุณสามารถใช้วิธีการนี้หากงานของคุณเกี่ยวข้องกับขั้นตอนการสร้าง "Execute shell" (หรือถ้าคุณสามารถเปลี่ยนแปลงได้) จากนั้นใช้ "set -m" เพื่อสร้างกลุ่มกระบวนการใหม่และใช้กับดักอย่างที่แสดงที่นี่เพื่อให้แน่ใจว่ากระบวนการทั้งหมดในกลุ่มจะถูกฆ่า
อเล็กซ์ O

3

เราใช้ปลั๊กอิน Build-หมดเวลาที่จะฆ่างานติดอยู่กับกลยุทธ์การหมดเวลาตั้งหรือNo Activity Absoluteสำหรับฉันนี่เป็นแนวทางที่ดีเมื่อคุณใช้โครงการฟรีสไตล์ สาเหตุที่งานสร้างของคุณคือ "ยกเลิกหลังจาก 0 วินาที" นั่นเป็นไปได้ว่ามีกระบวนการลูกที่ยังไม่เสร็จ จากเอกสาร :

เนื่องจาก Java อนุญาตเฉพาะเธรดที่ถูกขัดจังหวะที่ชุดของตำแหน่งคงที่ขึ้นอยู่กับว่าบิลด์ทำงานอย่างไรการดำเนินการยกเลิกอาจไม่มีผล ตัวอย่างเช่น,

  • ถ้าเจนกินส์กำลังรอให้กระบวนการของเด็กเสร็จสมบูรณ์ก็สามารถยกเลิกได้ทันที
  • ถ้าเจนกินส์ติดอยู่ในวงที่ไม่มีที่สิ้นสุดมันจะไม่มีวันถูกยกเลิก
  • หาก Jenkins กำลังทำเครือข่ายหรือไฟล์ I / O ภายใน Java VM (เช่นการคัดลอกไฟล์ที่มีความยาวหรืออัปเดต SVN) จะไม่สามารถยกเลิกได้

คุณสามารถลองใช้กลยุทธ์หมดเวลาแน่นอน คุณสามารถกำหนดตัวแปรส่วนกลางเพื่อให้คุณไม่ต้องทำซ้ำค่าการหมดเวลาในงาน:

  1. ไปที่ "Manage Jenkins"> "Configure System"
  2. ตรวจสอบ "ตัวแปรสภาพแวดล้อม" ใน "คุณสมบัติทั่วโลก"
  3. เพิ่มชื่อตัวแปรสภาพแวดล้อม = "GLOBAL_TIMEOUT_MINUTES" value = "20"
  4. ไปที่หน้าการกำหนดค่าของโครงการ
  5. ทำเครื่องหมายที่ "ยกเลิกการสร้างหากติดอยู่" ใน "Build Environment"
  6. เลือก "แน่นอน" สำหรับ "กลยุทธ์หมดเวลา" แน่นอนยังใช้กับกลยุทธ์อื่น ๆ
  7. ตั้งค่า "$ {GLOBAL_TIMEOUT_MINUTES}" เป็น "หมดเวลา"
  8. ตั้งค่าการกระทำการหมดเวลา "ยกเลิกการสร้าง"

หากสิ่งนี้ไม่ทำงานคุณสามารถลองค้นหาในบันทึกhttps: // your-jenkins-server / logหรือในเธรดการถ่ายโอนข้อมูล
การหยุดทำงานอาจเกิดจากปลั๊กอินเวอร์ชันใหม่ / เก่า พยายามค้นหากระบวนการลูกที่ยังไม่เสร็จ พยายามปิดใช้งานการดำเนินการ post-build ทีละรายการเพื่อค้นหาสิ่งที่อาจเป็นสาเหตุของปัญหา ท่านสามารถเข้าดู/superuser/1401879/debugging-what-happens-when-a-jenkins-build-unexpectedly-pauses-or-hangs


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