Jenkins问题:已删除的旧构建总是被重新触发构建
问题分析与解决
问题背景
配置了用于GitHub企业版的Jenkins自由风格任务,设置了PR相关的refspec和分支指定符,删除部分旧构建后,点击「立即构建」会重新执行已删除的旧构建,而非新PR的任务。
原因
- 构建号重置的影响:删除构建后调用了
job.updateNextBuildNumber(from),会让Jenkins认为构建号from到原最新构建号之间的任务都未完成,触发构建时会重新尝试填补这些缺失的构建号对应的任务,而这些任务关联的是旧PR。 - SCM状态缓存未更新:Jenkins会缓存每个PR分支的最后构建状态,删除构建后缓存记录未同步清除,触发构建时,Jenkins检测到旧PR的构建记录缺失,就会重新触发构建。
- 自由风格任务对PR的原生支持不足:通过refspec匹配PR的自由风格任务,没有像Multibranch Pipeline或专门PR插件那样精细化管理PR构建生命周期,无法自动识别已废弃的PR构建。
解决步骤
- 停止重置构建号:删除构建时不要执行
job.updateNextBuildNumber(from),保留原有构建号序列,避免Jenkins判定存在未完成任务。 - 清理SCM缓存:
- 进入Jenkins任务配置页面,找到「源码管理」模块。
- 点击「高级」按钮,执行「清除SCM缓存」操作,让Jenkins重新扫描PR状态。
- 改用PR原生支持的任务类型:
替换为Jenkins的Multibranch Pipeline任务,或安装GitHub Pull Request Builder插件,这类工具会自动关联PR与构建,删除旧构建后不会重新触发,仅在PR有新提交或状态变更时触发新构建。 - 调整构建触发逻辑:
关闭手动触发的「立即构建」,依赖Poll SCM或GitHub Webhook触发构建,确保只有新的PR提交或更新才会触发构建,避免手动触发时扫描所有旧PR分支。
内容的提问来源于stack exchange,提问作者Brixomatic
相关产品推荐
相关产品推荐

