Saat Anda menggunakan proyek gaya bebas, Anda dapat menyetel bahwa setelah 20 menit pembuatan dibatalkan jika tidak diselesaikan. Bagaimana ini mungkin dengan Proyek Saluran Pipa Banyak Cabang Jenkins?
Jawaban:
Anda dapat menggunakan langkah batas waktu :
timeout(20) {
node {
sh 'foo'
}
}
Jika Anda membutuhkan perbedaan TimeUnit
dari MINUTES , Anda dapat memberikan unit
argumen:
timeout(time: 20, unit: 'SECONDS') {
EDIT Agustus 2018: Saat ini dengan pipeline deklaratif yang lebih umum (mudah dikenali oleh pipeline
konstruksi level atas ), batas waktu juga dapat ditentukan menggunakan options
pada level yang berbeda (per pipeline keseluruhan atau per tahap):
pipeline {
options {
timeout(time: 1, unit: 'HOURS')
}
stages { .. }
// ..
}
Namun, jika Anda ingin menerapkan batas waktu ke satu langkah dalam pipeline deklaratif, batas waktu tersebut dapat digunakan seperti yang dijelaskan di atas.
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 }
Cara yang sulit untuk memperoleh node dua kali. Pertama kali dengan batas waktu luar, yang kedua dengan batas waktu bagian dalam. Saya kehilangan fiturnya juga.
Untuk Declarative Pipeline , disarankan untuk menggunakan langkah batas waktu di bagian options .
Jalankan kode di dalam blok dengan batas waktu yang ditentukan. Jika batas waktu tercapai, pengecualian (org.jenkinsci.plugins.workflow.steps.FlowInterruptedException) dilemparkan, yang menyebabkan pembatalan build (kecuali jika entah bagaimana tertangkap dan diproses). Satuan bersifat opsional tetapi defaultnya adalah menit.
Langkah batas waktu memiliki 3 parameter yang dapat Anda konfigurasikan:
waktu (wajib, int)
aktivitas (opsional, boolean)
unit (opsional, nilai: NANOSECONDS, MICROSECONDS, MILLISECONDS, SECONDS, MINUTES, HOURS, DAYS)
Contoh:
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')
The dokumentasi resmi Jenkins memiliki contoh yang sangat bagus untuk penggunaan timeout:
pipeline {
agent any
options {
timeout(time: 1, unit: 'HOURS')
}
stages {
stage('Example') {
steps {
echo 'Hello World'
}
}
}
}
activity
memiliki false sebagai default. When activity
is false - timeout untuk seluruh pekerjaan, untuk true
timeout untuk aktivitas (untuk mencetak apapun ke log).
timeout
untuk tahapan tertentu sedemikian rupa sehingga tahapan selanjutnya harus berjalan dengan anggun. Dalam contoh di atas, pipeline dibatalkan setelah batas waktu dan tahapan selanjutnya tidak dijalankan. Apakah ada cara untuk memenuhi kebutuhan saya? Kode Contoh untuk batas waktu dari tahap tertentu (dari Jenkins Doc resmi):pipeline { agent any stages { stage('Example') { options { timeout(time: 1, unit: 'HOURS') } steps { echo 'Hello World' } } } }
JENKINS_URL/job/<any Pipeline project>/pipeline-syntax/
→ Step Reference .