You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何获取Jenkins定时Pipeline上次运行状态并在失败时自动重启?

解决方案:Jenkins定时Pipeline失败自动重启

方法1:Pipeline脚本内置重试逻辑

直接在Pipeline脚本中嵌入失败重试逻辑,无需额外插件,是最轻量化的实现方式。

示例代码:

pipeline {
    agent any
    triggers {
        cron('0 6 * * *') // 每日6点定时触发
    }
    options {
        buildDiscarder(logRotator(numToKeepStr: '5')) // 保留最近5次构建日志,避免占用过多空间
    }
    stages {
        stage('核心任务执行') {
            steps {
                script {
                    // 最多重试3次,失败后立即重试;如需间隔可配合sleep
                    retry(3) {
                        // 替换为你的实际任务命令,比如构建、部署脚本
                        sh './your-core-business-script.sh'
                    }
                }
            }
        }
    }
    post {
        failure {
            echo "任务已耗尽最大重试次数,最终执行失败"
            // 可选:添加告警通知,比如邮件、企业微信消息
            // emailext(to: 'ops-alert@your-domain.com', subject: 'Pipeline执行失败', body: currentBuild.description)
        }
    }
}

如果需要在重试前等待一段时间,可以用waitUntil配合循环实现:

script {
    int maxRetries = 3
    int retryCount = 0
    boolean success = false
    
    while (retryCount < maxRetries && !success) {
        try {
            sh './your-core-business-script.sh'
            success = true
        } catch (Exception e) {
            retryCount++
            echo "任务失败,第${retryCount}次重试,等待30秒..."
            sleep(time: 30, unit: 'SECONDS')
        }
    }
    
    if (!success) {
        error "任务重试${maxRetries}次后仍失败"
    }
}

方法2:使用Jenkins插件实现无代码配置

如果不想修改Pipeline脚本,可以通过插件实现失败自动重启:

  • Retry Failed Builds Plugin:安装后,在Job配置的「Post-build Actions」中添加「Retry failed builds」,设置:
    • 最大重试次数(如3次)
    • 重试间隔(如5分钟)
    • 勾选「Only retry builds that failed」,仅在构建失败时触发重试
  • Build Failure Analyzer Plugin:适合复杂场景,可先分析失败原因(如网络超时、依赖下载失败),仅在匹配特定错误时触发重试

配置步骤:

  1. 安装对应插件后,进入目标Pipeline的配置页
  2. 滚动到「Post-build Actions」,点击「Add post-build action」
  3. 选择对应插件,按需求设置参数后保存即可

方法3:通过Jenkins API自定义监控脚本

如果需要更灵活的控制(如跨Job监控、复杂失败判断逻辑),可以编写定时脚本调用Jenkins API实现:

示例Shell脚本(需提前配置Jenkins账号和API Token):

#!/bin/bash

JENKINS_URL="http://your-jenkins-server:8080"
JOB_NAME="your-target-pipeline-job"
USERNAME="jenkins-username"
API_TOKEN="your-api-token"

# 获取最新构建状态
LATEST_BUILD_INFO=$(curl -s -u "${USERNAME}:${API_TOKEN}" "${JENKINS_URL}/job/${JOB_NAME}/lastBuild/api/json")
BUILD_STATUS=$(echo "${LATEST_BUILD_INFO}" | grep -o '"result":"[^"]*"' | cut -d'"' -f4)

# 若构建失败则触发重启
if [ "${BUILD_STATUS}" = "FAILURE" ]; then
    curl -X POST -u "${USERNAME}:${API_TOKEN}" "${JENKINS_URL}/job/${JOB_NAME}/build"
    echo "Pipeline构建失败,已自动触发重启"
else
    echo "Pipeline最新构建状态为${BUILD_STATUS},无需重启"
fi

将该脚本设置为另一个定时Jenkins Job(如每天6:10运行),或用系统crontab定时执行即可。

关键注意事项

  • 限制重试次数:务必设置最大重试阈值,避免因代码逻辑错误导致无限循环构建,浪费资源
  • 补充告警机制:即使自动重试,建议在最终失败时添加告警通知,让运维人员及时介入排查
  • 留存构建日志:保留历史构建日志,便于定位失败根源,避免重复触发相同问题

内容的提问来源于stack exchange,提问作者Man_Made

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 19:39:56