在Jenkins中,Pipeline是一种用于定义持续集成/持续交付(CI/CD)流程的工具。有时候,Pipeline的执行可能会超时,需要强制停止。
要在Jenkins Pipeline中设置超时,并在超时后强制停止运行,可以使用Jenkins Pipeline的timeout指令。timeout指令允许您设置一个时间限制,并在超过该限制时中断Pipeline的执行。
下面是一个示例的Jenkins Pipeline脚本,用于设置超时并在超时后强制停止运行:
pipeline {
agent any
stages {
stage('Build') {
steps {
// 执行构建步骤
}
}
stage('Test') {
steps {
// 执行测试步骤
}
}
stage('Deploy') {
steps {
// 执行部署步骤
}
}
}
options {
timeout(time: 1, unit: 'HOURS') // 设置超时时间为1小时
}
}
在上述示例中,Pipeline定义了三个阶段(Build、Test和Deploy),每个阶段都有相应的步骤。通过在Pipeline的options部分使用timeout指令,可以将超时时间设置为1小时。
如果Pipeline的执行超过了1小时,Jenkins将自动终止该Pipeline的执行,并将其标记为超时。
请注意,上述示例仅用于演示目的。您可以根据实际需求和Pipeline的复杂性进行相应的修改和调整。
############################################
设置超时
timeout(20) {
..
}
默认时间单位为MINUTES,如果其他时间单位,则使用unit
参数:SECONDS、MINUTES和HOURS
timeout(time: 20, unit: 'SECONDS') {
..
}
任务- 超时时间
pipeline {
options {
timeout(time: 1, unit: 'HOURS')
}
stages { .. }
// ..
}
步骤 - 超时
pipeline {
agent any
stages {
stage('Run') {
steps {
retry(3) {
sh './deploy.sh'
}
timeout(time: 3, unit: 'MINUTES') {
sh './ren_test.sh'
}
}
}
}
}
超时后继续执行
在上面的示例中,在阶段超时之后,流水线中止,并显示以下消息:
Sending interrupt signal to process Cancelling nested steps due to timeout
如果超时后,想要继续执行后续步骤,需要捕获异常。
pipeline {
agent any
stages {
stage('Build-1') {
options {
timeout(time: 1, unit: 'HOURS')
}
steps {
script {
try {
sh './run_test.sh'
} catch (error) {
println "Error happened, continuing"
}
}
}
}
}
############################################
Jenkins job timeout
需要使用到这款插件:build timeout plugin,我是用的Jenkins版本是2.286,默认已安装了该插件,如果你的Jenkins中没有默认安装,可以在插件管理中搜索并安装。
配置方式非常简单,如下:
- 首先进入你想要配置超时时长的Job,然后找到Build Environment,勾选Abort the build if it’s stuck。
- 然后在其中配置Timeout minutes即可。
- 例如我想要配置60分钟后强制停止,那就可以写60。