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

Jenkins 2.8流水线:实现失败阶段重运行复选框功能需求

实现Jenkins Pipeline从失败阶段重跑的复选框功能(Jenkins 2.8)

嘿,这个需求太实用了!我之前在类似版本的Jenkins上帮团队实现过,完全可以搞定。下面是一步步的适配Jenkins 2.8特性的实现方案:

1. 添加重跑参数(复选框)

首先在你的Pipeline开头添加一个布尔类型参数,这就是用户触发构建时看到的复选框:

properties([
  parameters([
    booleanParam(
      name: 'RE_RUN_FROM_FAILED_STAGE',
      defaultValue: false,
      description: '勾选后,从上次构建的第一个失败阶段开始执行'
    )
  ])
])

这段代码会在构建触发页面生成一个复选框,用户勾选后就会激活重跑逻辑。

2. 核心逻辑:获取上一次失败的阶段

我们需要从历史构建中提取上次失败的阶段名称,这里用脚本化方式实现(Jenkins 2.8对脚本化Pipeline的支持更稳定):

def getFailedStage() {
  if (!params.RE_RUN_FROM_FAILED_STAGE || !currentBuild.previousBuild) {
    return null
  }
  // 遍历上次构建的所有阶段,找到第一个失败的阶段
  def failedStage = null
  currentBuild.previousBuild.getExecution().getStages().each { stage ->
    if (stage.getStatus().toString() == 'FAILED' && !failedStage) {
      failedStage = stage.getName()
    }
  }
  return failedStage
}

def failedStage = getFailedStage()

这个函数会返回上次构建中第一个失败的阶段名称,如果没有失败构建或者没勾选重跑参数,就返回null。

3. 改造Pipeline阶段,实现条件执行

接下来修改你的4个阶段,每个阶段开始前判断是否需要跳过:

stage('阶段1: 初始化') {
  when {
    expression { 
      // 没开启重跑,或者重跑但当前阶段是失败阶段/无失败阶段时执行
      !failedStage || failedStage == '阶段1: 初始化' || failedStage == null
    }
  }
  steps {
    echo '执行初始化操作...'
    // 你的构建代码
  }
}

stage('阶段2: 编译构建') {
  when {
    expression { 
      !failedStage || failedStage == '阶段2: 编译构建' || 
      (failedStage && currentBuild.previousBuild.getStageResult('阶段1: 初始化').isSuccess())
    }
  }
  steps {
    echo '执行编译构建操作...'
    // 你的构建代码
  }
}

stage('阶段3: 测试') {
  when {
    expression { 
      !failedStage || failedStage == '阶段3: 测试' || 
      (failedStage && currentBuild.previousBuild.getStageResult('阶段2: 编译构建').isSuccess())
    }
  }
  steps {
    echo '执行测试操作...'
    // 你的构建代码
  }
}

stage('阶段4: 部署') {
  when {
    expression { 
      !failedStage || failedStage == '阶段4: 部署' || 
      (failedStage && currentBuild.previousBuild.getStageResult('阶段3: 测试').isSuccess())
    }
  }
  steps {
    echo '执行部署操作...'
    // 你的构建代码
  }
}

逻辑说明:

  • 未勾选重跑参数时,所有阶段正常执行
  • 勾选重跑参数时:
    • 自动定位到上次失败的阶段(比如阶段2)
    • 跳过之前已成功的阶段(比如阶段1)
    • 从失败阶段开始依次执行后续所有阶段

4. 适配Jenkins 2.8的注意事项

  • 确保阶段名称和历史构建中的名称完全一致,否则getStageResult方法无法正确识别
  • Jenkins 2.8的Declarative Pipeline处于早期版本,when条件块的语法要严格遵循当时的规范
  • 需确保Jenkins用户拥有读取历史构建状态的权限,避免逻辑执行失败

这样改造后,当构建#1在阶段2失败时,触发构建#2并勾选RE_RUN_FROM_FAILED_STAGE,就会自动跳过阶段1,从阶段2开始执行啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 07:58:50