Câu trả lời:
Bạn có thể sử dụng bước thời gian chờ :
timeout(20) {
node {
sh 'foo'
}
}
Nếu bạn cần một khác nhau TimeUnit
hơn BIÊN , bạn có thể cung cấp các unit
luận cứ:
timeout(time: 20, unit: 'SECONDS') {
CHỈNH SỬA tháng 8 năm 2018: Ngày nay với các đường ống khai báo phổ biến hơn (dễ dàng nhận ra bởi pipeline
cấu trúc cấp cao nhất ), thời gian chờ cũng có thể được chỉ định bằng cách sử dụng options
ở các cấp độ khác nhau (mỗi đường ống tổng thể hoặc mỗi giai đoạn):
pipeline {
options {
timeout(time: 1, unit: 'HOURS')
}
stages { .. }
// ..
}
Tuy nhiên, nếu bạn muốn áp dụng thời gian chờ cho một bước trong quy trình khai báo, nó có thể được sử dụng như mô tả ở trên.
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 }
Một cách khó khăn là bạn có được nút hai lần. Lần đầu tiên với thời gian chờ bên ngoài, lần thứ hai với thời gian chờ bên trong. Tôi cũng thiếu tính năng này.
Đối với một Đường ống Khai báo, bạn nên sử dụng bước thời gian chờ trong phần tùy chọn .
Thực thi mã bên trong khối với giới hạn thời gian chờ xác định. Nếu đạt đến giới hạn thời gian, một ngoại lệ (org.jenkinsci.plugins.workflow.steps.FlowInterruptException) sẽ được ném ra, dẫn đến việc hủy bỏ bản dựng (trừ khi nó được bắt và xử lý bằng cách nào đó). Đơn vị là tùy chọn nhưng mặc định là phút.
Bước thời gian chờ có 3 thông số bạn có thể định cấu hình:
thời gian (bắt buộc, int)
hoạt động (tùy chọn, boolean)
đơn vị (tùy chọn, giá trị: NANOSECONDS, MICROSECONDS, MILLISECONDS, SECONDS, MINUTES, HOURS, DAYS)
Ví dụ:
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')
Các tài liệu chính thức Jenkins có một ví dụ rất tốt đẹp cho việc sử dụng một thời gian chờ:
pipeline {
agent any
options {
timeout(time: 1, unit: 'HOURS')
}
stages {
stage('Example') {
steps {
echo 'Hello World'
}
}
}
}
activity
có giá trị mặc định là false. Khi nào activity
là false - thời gian chờ cho toàn bộ công việc, true
thời gian chờ cho hoạt động (để in bất kỳ thứ gì vào nhật ký).
timeout
vào một giai đoạn cụ thể theo cách mà giai đoạn tiếp theo sẽ chạy một cách duyên dáng. Trong ví dụ trên, đường ống bị hủy bỏ sau khi hết thời gian chờ và các giai đoạn tiếp theo không được thực thi. Có cách nào để đạt được yêu cầu của tôi không? Mã mẫu cho thời gian chờ của một giai đoạn nhất định (từ Jenkins Doc chính thức):pipeline { agent any stages { stage('Example') { options { timeout(time: 1, unit: 'HOURS') } steps { echo 'Hello World' } } } }
JENKINS_URL/job/<any Pipeline project>/pipeline-syntax/
→ Tham chiếu bước .