如何向Jenkins管道添加超时步骤

时间:2016-06-29 09:47:46

标签: jenkins jenkins-pipeline

当您使用自由样式项目时,您可以设置在20分钟后,如果没有结束,则构建中止。如何使用Jenkins多分支管道项目实现这一目标?

3 个答案:

答案 0 :(得分:121)

您可以使用timeout步骤:

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

如果您需要与 MINUTES 不同的TimeUnit,则可以提供unit参数:

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

2018年8月编辑:现在有了更常见的declarative pipelines(由顶级pipeline构造轻松识别),也可以使用{{3}指定超时在不同级别(每个整个管道或每个阶段):

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

但是,如果要对声明性管道中的单个步骤应用超时,可以按上述方式使用它。

答案 1 :(得分:6)

对于Declarative Pipeline,建议在timeout step中使用options-section

以确定的超时限制执行块内的代码。 如果达到时间限制,则出现异常 (org.jenkinsci.plugins.workflow.steps.FlowInterruptedException)是 抛出,导致中止构建(除非它被捕获并 处理过)。单位是可选的,但默认为分钟。

超时步骤有3个parameters,您可以配置:

  • 时间(必填,整数)

    • 超时量,如果未指定持续时间(以分钟为单位)
  • 活动(可选,布尔值)

    • 此块的日志中没有任何活动,而不是绝对持续时间后超时。
  • 单位(可选,值:NANOSECONDS,MICROSECONDS,MILLISECONDS,SECONDS,MINUTES,HOURS,DAYS)

    • 时间的单位,默认为分钟

示例:

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

official Jenkins documentation有一个很好的超时示例:

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

答案 2 :(得分:2)

在声明式管道中,您可以使用:

pipeline {
    agent any
    stages {
        stage('Deploy') {
            steps {
                retry(3) {
                    sh './flakey-deploy.sh'
                }

                timeout(time: 3, unit: 'MINUTES') {
                    sh './health-check.sh'
                }
            }
        }
    }
}