Jenkins - Pipeline Retry

Jenkins - Pipeline Retry

引言

日常运行自动化测试用例,通常是晚上定时启动 pipeline job,一个 pipeline 脚本可能会涉及到多个 Job, 最后 post 发邮件汇总测试 report。有时会遇到 Jenkins 环境问题导致某 Job 失败,第二天需要手动触发 job 重跑,这样影响工作效率。那我们是否可以在 pipeline 脚本里自动 retry 呢?

retry

在 Jenkins Pipeline 中,可以使用 retry 指令来重试某个步骤。以下是一个基本的示例:

groovy 复制代码
pipeline {
    agent any

    stages {
        stage('Test') {
            steps {
                retry(3) {
                    // 这里放置你想要重试的步骤
                }
            }
        }
    }
}

在这个示例中,如果步骤失败,Jenkins 会尝试重新运行它,最多重试 3 次。你可以根据需要更改重试次数。

retry 实例

可以运行下面这个 pipeline 脚本实例,其中 Build stage 中有加 retry 3 次。

groovy 复制代码
pipeline {
    agent { label "xxx" }

    stages {
        stage('Preparation') {
            steps {
                echo 'Preparing...'
            }
        }
        stage('Build') {
            steps {
                retry(3) {
                    script {
                        echo "Attempting to build..."
                        // 可能失败的命令
                        sh 'make build'
                    }
                }
            }
        }
        stage('Test') {
            steps {
                echo 'Running tests...'
            }
        }
    }
}

jenkins pipeline 执行 log,Build stage 执行了 3 次均失败,所以 Test stage 将不再执行。

bash 复制代码
20:08:23  [Pipeline] {
20:08:23  [Pipeline] stage
20:08:23  [Pipeline] { (Preparation)
20:08:23  [Pipeline] echo
20:08:23  Preparing...
20:08:23  [Pipeline] }
20:08:23  [Pipeline] // stage
20:08:23  [Pipeline] stage
20:08:23  [Pipeline] { (Build)
20:08:23  [Pipeline] retry
20:08:23  [Pipeline] {
20:08:23  [Pipeline] script
20:08:23  [Pipeline] {
20:08:23  [Pipeline] echo
20:08:23  Attempting to build...
20:08:23  [Pipeline] sh
20:08:24  + make build
20:08:24  make: *** No rule to make target 'build'.  Stop.
20:08:24  [Pipeline] }
20:08:24  [Pipeline] // script
20:08:24  [Pipeline] }
20:08:24  ERROR: script returned exit code 2
20:08:24  Retrying
20:08:24  [Pipeline] {
20:08:24  [Pipeline] script
20:08:24  [Pipeline] {
20:08:24  [Pipeline] echo
20:08:24  Attempting to build...
20:08:24  [Pipeline] sh
20:08:24  + make build
20:08:24  make: *** No rule to make target 'build'.  Stop.
20:08:24  [Pipeline] }
20:08:24  [Pipeline] // script
20:08:24  [Pipeline] }
20:08:24  ERROR: script returned exit code 2
20:08:24  Retrying
20:08:24  [Pipeline] {
20:08:25  [Pipeline] script
20:08:25  [Pipeline] {
20:08:25  [Pipeline] echo
20:08:25  Attempting to build...
20:08:25  [Pipeline] sh
20:08:25  + make build
20:08:25  make: *** No rule to make target 'build'.  Stop.
20:08:25  [Pipeline] }
20:08:25  [Pipeline] // script
20:08:25  [Pipeline] }
20:08:25  [Pipeline] // retry
20:08:25  [Pipeline] }
20:08:25  [Pipeline] // stage
20:08:25  [Pipeline] stage
20:08:25  [Pipeline] { (Test)
20:08:25  Stage "Test" skipped due to earlier failure(s)
20:08:25  [Pipeline] }
20:08:25  [Pipeline] // stage
20:08:25  [Pipeline] }
20:08:26  [Pipeline] // node
20:08:26  [Pipeline] End of Pipeline
20:08:26  ERROR: script returned exit code 2
20:08:26  Finished: FAILURE
相关推荐
略略略咯咯2 小时前
jenkins
运维·servlet·jenkins
蒲锘3 小时前
Devops项目笔记阶段 7:Jenkins CI/CD 自动化部署
笔记·jenkins·devops
醉颜凉16 小时前
Elasticsearch 相关性评分核心解密:tie_breaker 参数作用原理与实战调优全解析
大数据·elasticsearch·jenkins
Behaviour1 天前
Unity游戏之Jenkins的安装部署应用
游戏·unity·jenkins
醉颜凉2 天前
Elasticsearch 核心基石:倒排索引全解析(原理+结构+流程图+实战)
elasticsearch·jenkins·流程图
醉颜凉2 天前
Elasticsearch底层原理:文档更新与删除完整执行流程深度剖析
大数据·elasticsearch·jenkins
潘正翔2 天前
k8s高级_调度器Deployment
linux·运维·云原生·容器·kubernetes·jenkins·devops
潘正翔2 天前
jenkins构建cicd流水线
运维·服务器·ci/cd·容器·自动化·jenkins·cicd
qq_161111272 天前
Jenkins+Python自动化测试持续集成详细教程
自动化测试·python·jenkins·教程·持续集成
普通网友3 天前
Springboot中使用Elasticsearch(部署+使用+讲解 最完整)
spring boot·elasticsearch·jenkins