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
相关产品推荐
相关产品推荐

