如何在Jenkins Pipeline中添加超时步骤

cwdobuhd  于 2023-10-17  发布在  Jenkins
关注(0)|答案(5)|浏览(220)

当你使用自由样式的项目时,你可以设置20分钟后,如果没有完成,构建就会中止。Jenkins多分支管道项目如何实现这一点?

1qczuiv0

1qczuiv01#

您可以使用超时步骤:

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

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

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

**2018年8月编辑:**现在有了更常见的声明性管道(很容易被顶级pipeline结构识别),超时也可以在不同级别上使用options指定(每个整体管道或每个阶段):

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

但是,如果您想将超时应用于声明性管道中的单个步骤,则可以如上所述使用它。

qf9go6mv

qf9go6mv2#

对于声明式管道,建议使用选项部分中的超时步骤。
在块内执行代码,并具有确定的超时限制。如果达到了时间限制,就会抛出一个异常(org.jenkinsci.plugins.workflow.steps.FlowInterruptedException),导致构建中止(除非它被捕获并以某种方式处理)。单位是可选的,但默认为分钟。
超时步骤有3个参数可以配置:

*time(required,int)

  • 超时的数量,如果没有单位,则以分钟为单位声明持续时间
    *activity(可选,布尔值)
  • 此块的日志中没有活动后的超时,而不是绝对持续时间。
    *单位(可选,取值:纳秒、微秒、毫秒、小时、天)
    *时间单位,默认为

示例如下:

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'
            }
        }
    }
}
disbfnqx

disbfnqx3#

在声明性管道中,您可以用途:

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

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

k4emjkb14#

对于DeclarativePipeline(整个作业超时):

pipeline {
    options {
        timeout(time: 3, unit: 'HOURS')
    }
    
    agent {
        label 'agent_name'
    }
        
    stages {
        stage('Stage_name') {
            steps {
                // ...
            }
        }
    }
    
    // ...
}

对于ScriptedPipeline(整个作业超时):

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 '...'
                // ...
            }

            // ...
        }
    }    
}
57hvy0tb

57hvy0tb5#

使用后台文件中的选项设置超时。这仅适用于单级,而不是整个管线。

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

超时单位可以是:

NANOSECONDS, MICROSECONDS, MILLISECONDS, SECONDS, MINUTES, HOURS, DAYS

参考:
https://www.jenkins.io/doc/book/pipeline/syntax/#options
https://www.jenkins.io/doc/pipeline/steps/workflow-basic-steps/#timeout-enforce-time-limit

相关问题