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

Jenkins声明式Pipeline中如何获取retry逻辑的当前重试次数

问题根因

原有计数器无法正常递增由两点导致:

  • 执行顺序问题:当原始业务逻辑抛出异常触发重试时,块内后续代码会被直接中断,写在业务逻辑末尾的counter = counter + 1不会执行,计数器始终停留在初始值。
  • Pipeline CPS机制限制:Jenkins Pipeline的Groovy代码会经过CPS序列化转换,普通def定义的局部变量在重试回滚执行状态时,修改后的值不会被持久化,跨重试周期读取到的永远是初始值。
可行实现方案

使用Pipeline内置的环境变量存储计数是最稳妥的方案,env变量全局持久化,不受重试状态回滚影响,同时将计数器递增逻辑放到执行块最前端,保证进入块时就能拿到正确的次数:

steps{
    script{
        // 初始化计数器
        env.RETRY_COUNTER = "0"
        retry(3){
            // 每进入一次执行块先递增,首次执行值为1,第一次重试值为2,第二次重试值为3
            env.RETRY_COUNTER = (env.RETRY_COUNTER.toInteger() + 1).toString()
            // 计算当前已重试次数:首次执行为0,第一次重试为1,第二次重试为2
            def currentRetryTimes = env.RETRY_COUNTER.toInteger() - 1

            // 原有业务逻辑
            // my original logic

            // 重试触发时执行附加逻辑
            if (currentRetryTimes > 0){
                echo "当前触发第${currentRetryTimes}次重试,执行附加处理"
                // my additional logic
            }
        }
        // 可选:执行完成后清理临时环境变量,避免污染后续步骤
        env.remove('RETRY_COUNTER')
    }
}

说明:retry(3)代表最多总共执行3次块内代码,即首次执行失败后最多重试2次,和上述计数逻辑完全匹配。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 22:48:21