Jenkins Pipelineにタイムアウトステップを追加する方法


93

フリースタイルのプロジェクトを使用している場合、20分後に終了しない場合にビルドを中止するように設定できます。Jenkins Multi Branch Pipeline Projectでこれはどのように可能ですか?

回答:


187

タイムアウトステップを使用できます。

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

MINUTESTimeUnit以外のものが必要な場合は、引数を指定できます。unit

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

2018年8月の編集:最近では、より一般的な宣言型パイプライン(最上位のpipeline構造で簡単に認識される)を使用optionsして、さまざまなレベル(パイプライン全体またはステージごと)でタイムアウトを指定することもできます。

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

それでも、宣言的パイプラインの単一のステップにタイムアウトを適用する場合は、上記のように使用できます。


6
リファレンスは、1。Jenkinsダッシュボード<パイプラインプロジェクト> ▼→ パイプライン構文ステップリファレンスまたは2. JENKINS_URL/job/<any Pipeline project>/pipeline-syntax/ステップリファレンスでも利用できます。
Gerold Broser 16

2
ノードを取得する部分でのみタイムアウトし、コンテンツの実行に費やした時間をカウントしないことは可能ですか?すなわち:時々のノードがオフラインになっていると私はそれがむしろタイムアウトよりも、時間内のノードを取得することはできませんが、それは取得ノードを行なったし、実行している場合、ジョブは失敗したくない場合は、ジョブの道を失敗にしたい...
ジェイク

ノードがオンラインであるかどうかを知りたいだけなら、次のように質問できます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 }。ノードを2回取得するトリッキーな方法です。1回目は外部タイムアウト、2回目は内部タイムアウトです。機能もありません。
elou 2018

@ジェイク、それは質問になるはずです!
charlie_pl 2018年

1
タイムアウトの期限が切れたときに、独自のエラーメッセージをどのようにスローしますか?
red888 2018

4

以下のために宣言型パイプラインには、使用するadvicedされたタイムアウトステップにおけるオプション・セクションを

決められたタイムアウト制限でブロック内のコードを実行します。時間制限に達すると、例外(org.jenkinsci.plugins.workflow.steps.FlowInterruptedException)がスローされ、ビルドが中止されます(何らかの方法でキャッチおよび処理されない限り)。単位はオプションですが、デフォルトは分です。

タイムアウトステップには、構成可能な3つのパラメーターがあります。

  • 時間(必須、整数)

    • 単位が分単位で指定されていない場合のタイムアウトの量
  • アクティビティ(オプション、ブール)

    • 絶対的な期間ではなく、このブロックのログにアクティビティがない場合のタイムアウト。
  • 単位(オプション、値:NANOSECONDS、MICROSECONDS、MILLISECONDS、SECONDS、MINUTES、HOURS、DAYS)

    • 時間の単位、デフォルトはMINUTES

例:

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

Jenkins公式ドキュメントには、タイムアウトの使用に関する非常に優れた例があります。

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

2
activityデフォルトはfalseです。activityがfalseの場合-ジョブ全体のtrueタイムアウト、アクティビティのタイムアウト(ログに何かを出力するため)。
Maxim Suslov

timeout特定のステージを追加して、後続のステージが正常に実行されるようにします。上記の例では、タイムアウト後にパイプラインが中止され、後続のステージは実行されません。私の要件を達成する方法はありますか?特定のステージのタイムアウトのサンプルコード(公式Jenkins Docから):pipeline { agent any stages { stage('Example') { options { timeout(time: 1, unit: 'HOURS') } steps { echo 'Hello World' } } } }
Yash
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.