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

Jenkins声明式流水线:失败测试数<3时重试functional阶段

在声明式Jenkins流水线中实现functional阶段的自动重跑

声明式Jenkins流水线本身没有原生的阶段跳转语法,要实现失败测试数<3时重跑整个functional阶段,核心思路是用循环结构包裹functional和report阶段,通过变量控制循环是否继续执行。

具体实现代码

pipeline {
    agent any
    stages {
        stage('Test Workflow') {
            steps {
                script {
                    def shouldRetry = true
                    int retryCount = 0
                    final int MAX_RETRIES = 3 // 限制最大重试次数,避免无限循环

                    while (shouldRetry && retryCount < MAX_RETRIES) {
                        // 执行并行测试的functional阶段
                        stage('functional') {
                            parallel {
                                stage('API Test') {
                                    steps {
                                        echo 'Running API functional tests'
                                        // 替换为你的实际测试执行逻辑
                                    }
                                }
                                stage('UI Test') {
                                    steps {
                                        echo 'Running UI functional tests'
                                        // 替换为你的实际测试执行逻辑
                                    }
                                }
                                // 添加更多并行测试阶段
                            }
                        }

                        // 执行结果分析的report阶段
                        stage('report') {
                            steps {
                                script {
                                    // 替换为你实际获取失败测试数的逻辑(比如解析JUnit报告)
                                    def failedTests = new Random().nextInt(5) // 示例用随机数模拟
                                    echo "检测到失败测试数:${failedTests}"

                                    if (failedTests < 3) {
                                        retryCount++
                                        echo "失败测试数小于3,准备第${retryCount}次重跑functional阶段..."
                                        shouldRetry = true
                                    } else {
                                        echo "失败测试数≥3,停止重跑"
                                        shouldRetry = false
                                    }
                                }
                            }
                        }
                    }

                    if (retryCount >= MAX_RETRIES) {
                        echo "已达到最大重试次数(${MAX_RETRIES}次),终止重跑流程"
                    }
                }
            }
        }
    }
}

关键说明

  • 用while循环包裹functional和report的执行逻辑,通过shouldRetry变量控制是否触发下一次重跑。
  • 声明式流水线中必须将循环逻辑放在script块内,因为声明式语法不支持原生循环,需要借助脚本式Groovy的能力。
  • 添加MAX_RETRIES限制最大重试次数,防止因持续满足failedTests <3导致无限循环。
  • functional阶段的并行测试逻辑可以完全保留原有的写法,无需修改结构。
  • report阶段中,你需要将示例里的随机数模拟代码替换为真实的失败测试数统计逻辑(比如用junit插件解析报告后获取失败数)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 16:02:38