เมื่อคุณใช้โปรเจ็กต์ฟรีสไตล์คุณสามารถตั้งค่าได้ว่าหลังจาก 20 นาทีบิลด์จะถูกยกเลิกหากไม่ได้ข้อสรุป สิ่งนี้เป็นไปได้อย่างไรกับโครงการไปป์ไลน์หลายสาขาของเจนกินส์
เมื่อคุณใช้โปรเจ็กต์ฟรีสไตล์คุณสามารถตั้งค่าได้ว่าหลังจาก 20 นาทีบิลด์จะถูกยกเลิกหากไม่ได้ข้อสรุป สิ่งนี้เป็นไปได้อย่างไรกับโครงการไปป์ไลน์หลายสาขาของเจนกินส์
คำตอบ:
คุณสามารถใช้ขั้นตอนการหมดเวลา :
timeout(20) {
node {
sh 'foo'
}
}
หากคุณต้องการเวลาที่แตกต่างTimeUnit
จากMINUTESคุณสามารถระบุunit
อาร์กิวเมนต์:
timeout(time: 20, unit: 'SECONDS') {
แก้ไข ส.ค. 2018:ปัจจุบันมีท่อส่งประกาศที่ใช้กันทั่วไปมากขึ้น( pipeline
โครงสร้างระดับบนสุดจำได้ง่าย) ยังสามารถระบุระยะหมดเวลาโดยใช้options
ในระดับต่างๆได้ (ต่อไปป์ไลน์โดยรวมหรือต่อขั้นตอน):
pipeline {
options {
timeout(time: 1, unit: 'HOURS')
}
stages { .. }
// ..
}
อย่างไรก็ตามหากคุณต้องการใช้การหมดเวลากับขั้นตอนเดียวในไปป์ไลน์ที่เปิดเผยสามารถใช้ได้ตามที่อธิบายไว้ข้างต้น
def n=Jenkins.instance.getNode("ETService3") if (n!=null && n.computer && n.computer.online) { echo "Online" } else { echo "Offline" // wait a little bit and try again }
วิธีที่ยุ่งยากคือการได้รับโหนดสองครั้ง ครั้งแรกที่มีการหมดเวลาภายนอกครั้งที่สองที่มีการหมดเวลาภายใน ฉันพลาดฟีเจอร์นี้ด้วย
สำหรับการ declarative ท่อส่งมันจะรับคำแนะนำให้ใช้ขั้นตอนหมดเวลาในตัวเลือกส่วน
รันโค้ดภายในบล็อกโดยมีการกำหนดระยะเวลาออก หากถึงเวลาที่กำหนดจะมีการโยนข้อยกเว้น (org.jenkinsci.plugins.workflow.steps.FlowInterruptedException) ซึ่งนำไปสู่การยกเลิกการสร้าง (เว้นแต่จะถูกจับและประมวลผลอย่างใดอย่างหนึ่ง) หน่วยเป็นทางเลือก แต่มีค่าเริ่มต้นเป็นนาที
ขั้นตอนการหมดเวลามี 3 พารามิเตอร์ที่คุณสามารถกำหนดค่าได้:
เวลา (จำเป็น int)
กิจกรรม (ทางเลือกบูลีน)
หน่วย (ไม่บังคับ, ค่า: NANOSECONDS, MICROSECONDS, มิลลิวินาที, วินาที, นาที, ชั่วโมง, วัน)
ตัวอย่าง:
timeout(time: 10) // would lead to a timeout of 10 minutes (MINUTES is default value)
timeout(time: 10, unit: 'SECONDS') // a 10 seconds timeout
timeout(time: 10, activity: false, unit: 'MILLISECONDS')
เอกสารเจนกินส์อย่างเป็นทางการมีตัวอย่างที่ดีมากสำหรับการใช้งานของหมดเวลาไปนี้:
pipeline {
agent any
options {
timeout(time: 1, unit: 'HOURS')
}
stages {
stage('Example') {
steps {
echo 'Hello World'
}
}
}
}
activity
มีเท็จเป็นค่าเริ่มต้น เมื่อactivity
ใดที่เป็นเท็จ - หมดเวลาสำหรับงานทั้งหมดสำหรับการtrue
หมดเวลาสำหรับกิจกรรม (เพื่อพิมพ์อะไรลงในบันทึก)
timeout
เตจเฉพาะเพื่อให้สเตจถัดไปทำงานอย่างสง่างาม ในตัวอย่างข้างต้นไปป์ไลน์จะถูกยกเลิกหลังจากหมดเวลาและไม่ดำเนินการขั้นตอนต่อ ๆ ไป มีวิธีที่จะบรรลุความต้องการของฉันหรือไม่? รหัสตัวอย่างสำหรับการหมดเวลาของเวทีที่กำหนด (จาก Jenkins Doc อย่างเป็นทางการ):pipeline { agent any stages { stage('Example') { options { timeout(time: 1, unit: 'HOURS') } steps { echo 'Hello World' } } } }
JENKINS_URL/job/<any Pipeline project>/pipeline-syntax/
→ อ้างอิงขั้นตอน