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

我的Jenkins pipeline中retry重试功能不生效是什么原因?

问题原因

你的retry逻辑未生效是核心配置缺失导致的:

  • curl默认不会将HTTP请求错误识别为命令执行失败:curl只要本身进程正常启动执行,哪怕遇到4xx/5xx类的服务端错误,默认退出码也为0。而Jenkins的retry块只有捕获到步骤抛出的异常时才会触发重试,sh步骤默认只有收到非零退出码才会抛出异常,因此上传失败后Jenkins会认为步骤执行成功,直接退出。
  • 可选优化:建议调整timeout和retry的嵌套顺序,把retry放在timeout内部,避免多次重试的总时长超出你的预期(你当前的写法是每次重试都有5分钟超时,总最长耗时15分钟,如果这是符合预期的可以不用改)。

修复方案

给curl添加-f(--fail)参数即可,该参数会让curl在HTTP请求返回4xx/5xx错误时主动返回非零退出码,触发sh步骤抛异常进入重试逻辑。修正后代码如下:

withCredentials([[$class: 'UsernamePasswordMultiBinding',
                  credentialsId:'nexus-user',
                  usernameVariable: 'NEXUS_USR',
                  passwordVariable: 'NEXUS_PW']]) {
  final Integer maxTries = 3
  Integer numTries = 1
  retry(maxTries) {
    timeout(time: 5) { // Timeout in minutes
      println "Trying $numTries/$maxTries upload to file server."
      numTries++
      sh """
        curl -v -f -u $NEXUS_USR:$NEXUS_PW --upload-file $artifact $remoteUrl/$remoteDir/$artifact
      """
    }
  }
}

如果需要对连接超时、DNS解析错误等场景也增强重试判定,还可以额外给curl添加--retry 2参数,作为curl层面的重试补充,和Jenkins层面的重试形成双层保障。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 10:54:01