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

当您使用自由样式项目时,您可以设置在20分钟后,如果没有结束,则生成将中止。这怎么可能与詹金斯多分支管道项目?

152301 次浏览

你可以使用 timeout步骤:

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

如果你需要一个不同于 MINUTESTimeUnit,你可以提供 unit参数:

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

编辑: 2018年8月: 如今,随着更常见的 declarative pipelines(很容易被顶级 pipeline构造识别) ,也可以在不同级别(每个整体流水线或每个阶段)使用 options指定超时:

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

不过,如果希望对声明性管道中的单个步骤应用超时,可以如上所述使用超时。

For a 声明管道 it is adviced to use the 暂停步骤 in the 选项-部分.

Executes the code inside the block with a determined time out limit. 如果达到时间限制,则为异常 (org.jenkinsci.plugins.workflow. step. FlowInterruptedException)是 抛出,这将导致中止构建(除非它被捕获并且 单位是可选的,但默认为分钟。

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

  • Time (必需的,int)

    • 如果没有以分钟为单位的持续时间,则超时的数量
  • Activity (可选,boolean)

    • 在此块的日志中没有活动而不是绝对持续时间后超时。
  • 单位 (可选,值: 纳秒,微秒,毫秒,秒,分钟,小时,天)

    • 时间的单元,默认为 几分钟

例子:

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

詹金斯的官方文件有一个很好的使用超时的例子:

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

In a declarative pipeline you can use:

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


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

对于 陈述性的管道(整个作业的超时) :

pipeline {
options {
timeout(time: 3, unit: 'HOURS')
}
    

agent {
label 'agent_name'
}
        

stages {
stage('Stage_name') {
steps {
// ...
}
}
}
    

// ...
}

对于 剧本管道(整个作业的超时) :

def call() {
node('agent_name') {
timeout(time: 3, unit: 'HOURS') {
stage('Stage_name') {
// ...
}
}
}
}

超时 在舞台上(针对特定操作) :

声明管道

pipeline {
agent {
label 'agent_name'
}


stages {
stage('Stage_name') {
steps {
timeout(time: 3, unit: 'HOURS') {
sh ' ... '
echo '...'
// ...
}


// ...
}
}
}
}

脚本管道

def call() {
node('agent_name') {
stage('Stage_name') {
timeout(time: 3, unit: 'HOURS') {
sh '...'
echo '...'
// ...
}


// ...
}
}
}