Jenkins Pipeline'a bir zaman aşımı adımı ekleme


94

Serbest stil bir proje kullanırken, 20 dakika sonra, sonuçlandırılmamışsa, yapının iptal edileceğini ayarlayabilirsiniz. Jenkins Multi Branch Pipeline Project ile bu nasıl mümkün olabilir?

Yanıtlar:


194

Zaman aşımı adımını kullanabilirsiniz :

timeout(20) {
  node {
    sh 'foo'
  }
}

MINUTESTimeUnit dışında bir değere ihtiyacınız varsa , bağımsız değişkeni sağlayabilirsiniz :unit

timeout(time: 20, unit: 'SECONDS') {

DÜZENLEME Ağustos 2018: Günümüzde daha yaygın bildirimsel ardışık düzenlerle (üst düzey pipelineyapı tarafından kolayca tanınır ), zaman aşımları optionsfarklı düzeylerde (genel ardışık düzen veya aşama başına) kullanılarak da belirlenebilir:

pipeline {
  options {
      timeout(time: 1, unit: 'HOURS') 
  }
  stages { .. }
  // ..
}

Yine de, bildirime dayalı bir ardışık düzen içinde tek bir adıma zaman aşımı uygulamak istiyorsanız, yukarıda açıklandığı gibi kullanılabilir.


6
Referans ayrıca 1. Jenkins Dashboard<herhangi bir Pipeline projesi> ▼ → Pipeline SyntaxStep Reference veya 2. JENKINS_URL/job/<any Pipeline project>/pipeline-syntax/Step Reference altında da mevcuttur .
Gerold Broser

2
Yalnızca düğümü elde etme kısmını zaman aşımına uğratmak ve içerikleri çalıştırmak için harcanan zamanı saymamak mümkün müdür? Yani: bazen düğümler çevrim dışıdır ve zaman aşımı yerine bir düğümü zamanında alamazsa işin başarısız olması için bir yol istiyorum, ancak düğümü aldıysa ve çalışıyorsa işin başarısız olmasını istemiyorum ..
Jake

Düğümün çevrimiçi olup olmadığını bilmek istiyorsanız, şunu sorabilirsiniz: 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 }Düğümü iki kez edinmenin zor bir yolu. İlk kez dış zaman aşımıyla, ikincisi iç zaman aşımıyla. Ben de özelliği kaçırıyorum.
2018

@ Jake, bu bir soru olmalı!
charlie_pl

1
Zaman aşımı süresi dolduğunda kendi hata mesajınızı nasıl atarsınız?
red888

6

Bir İçin Bildirimsel Boru Hattı bunun kullanılması tavsiye edilir aşımı adımını içinde seçenekler kesiti .

Kodu belirli bir zaman aşımı limiti ile bloğun içinde yürütür. Zaman sınırına ulaşılırsa, bir istisna (org.jenkinsci.plugins.workflow.steps.FlowInterruptedException) atılır, bu da yapının iptal edilmesine yol açar (bir şekilde yakalanmadığı ve işlenmediği sürece). Birim isteğe bağlıdır ancak varsayılan olarak dakikadır.

Zaman aşımı adımında yapılandırabileceğiniz 3 parametre vardır :

  • zaman (gerekli, int)

    • Herhangi bir birimin dakika cinsinden belirtilmemesi durumunda zaman aşımı miktarı
  • etkinlik (isteğe bağlı, boole)

    • Bu blok için günlüklerde mutlak süre yerine hiçbir etkinlik olmaması durumunda zaman aşımı.
  • birim (isteğe bağlı, değerler: NANOSECONDS, MICROSECONDS, MILLISECONDS, SECONDS, MINUTES, HOURS, DAYS)

    • İçin birim zamanda , varsayılan DAKİKA

Örnekler:

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')

Resmi Jenkins dokümantasyon zaman aşımı kullanımı için çok güzel bir örnek vardır:

pipeline {
    agent any
    options {
        timeout(time: 1, unit: 'HOURS') 
    }
    stages {
        stage('Example') {
            steps {
                echo 'Hello World'
            }
        }
    }
}

2
activityvarsayılan olarak false değerine sahiptir. Ne zaman activityyanlıştır - tüm iş trueiçin, etkinlik için zaman aşımı için zaman aşımı (her şeyi günlüğe yazdırmak için).
Maxim Suslov

1
timeoutBelirli bir aşama için, sonraki aşamanın zarif bir şekilde çalışacağı şekilde eklemek istiyorum . Yukarıdaki örnekte, zaman aşımından sonra boru hattı iptal edilir ve sonraki aşamalar yürütülmez. Gereksinimi yerine getirmenin bir yolu var mı? Belirli bir aşamanın zaman aşımı için Örnek Kod (resmi Jenkins Doc'tan):pipeline { agent any stages { stage('Example') { options { timeout(time: 1, unit: 'HOURS') } steps { echo 'Hello World' } } } }
Yash
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.