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

Jenkins pipeline使用docker agent时重启失败阶段如何固定运行在原节点?

解决方法

有两种配置方式可以实现失败阶段重启时复用原节点:

方式一:全局配置(无需修改Pipeline代码,全量生效)

  • 进入Jenkins控制台 → 系统管理 → 系统配置
  • 找到「Pipeline」配置分组,勾选 重启失败构建的阶段时复用同一节点 选项
  • 保存配置后,所有支持阶段重启的Pipeline都会自动复用上次构建运行的节点

方式二:Pipeline代码层配置(仅对当前Pipeline生效)

修改你的Pipeline代码,动态读取上次失败构建的节点名称作为调度优先级,示例代码如下:

pipeline {
    agent {
        docker {
            // 首次运行时用DockerNodes标签调度,重启失败阶段时优先用上次运行的节点
            label getLastFailedBuildNode() ?: "DockerNodes"
            image "<image-path>"
            // 同一次构建的所有阶段复用同一个节点,避免阶段间调度漂移
            reuseNode true
        }
    }

    stages {
        stage("Stage - I") {
            steps {
                script {
                    println "In stage I"
                }
            }
        }

        stage("Stage - II") {
            steps {
                script {
                    println "In stage II"
                    error "Failing intentionally"
                }
            }
        }

        stage("Stage - III") {
            steps {
                script {
                    println "In stage III"
                }
            }
        }
    }
}

// 工具方法:获取最近一次失败构建的运行节点名
def getLastFailedBuildNode() {
    if (currentBuild.previousBuild && currentBuild.previousBuild.result == 'FAILURE') {
        return currentBuild.previousBuild.builtOnStr
    }
    return null
}

注意事项

  • 方式一依赖Jenkins Pipeline插件版本 >= 2.6,低于该版本需要先升级插件
  • 如果原节点处于离线、标签被移除等不可用状态,会自动回退到按照DockerNodes标签调度其他可用节点

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 17:39:02