Spinnaker重启Jenkins阶段后StageEnabled未重新计算问题咨询
Spinnaker阶段重启后Manual Judgment执行不符合预期的问题分析
结论
这不是正常行为,属于Spinnaker默认阶段启用逻辑的局限性导致的问题。
问题原因
Spinnaker的stageEnabled表达式默认仅在阶段第一次进入前置检查时计算一次,不会随着依赖阶段的状态更新(比如重启后成功)重新评估。当阶段2首次执行失败时,阶段3的stageEnabled已计算为true并标记为待执行;即使后续阶段2重启成功,阶段3的启用状态不会刷新,仍会按照最初的判定结果执行。
解决方案
方案1:修改表达式,获取阶段的最终执行状态
将阶段3的stageEnabled表达式改为直接取阶段2最后一次执行的状态,确保判断的是重启后的最新结果:
"stageEnabled": { "expression": "${ #execution.stages.?[name == 'Job1'][-1].status.toString() != 'SUCCEEDED' }", "type": "expression" }
解释:
#execution.stages:获取当前流水线的所有阶段实例(包含重启后的阶段记录)?[name == 'Job1']:筛选出所有名为Job1的阶段[-1]:取最后一次执行的阶段实例(即重启后的最新状态)- 最终判断该实例的状态是否不为
SUCCEEDED
方案2:开启动态阶段评估特性(需管理员权限)
如果使用Spinnaker 1.28及以上版本,可以通过开启dynamicStageEvaluation让stageEnabled在阶段准备执行前重新计算:
在Orca服务的配置文件中添加:
orca: features: dynamicStageEvaluation: true
该配置会让所有阶段的stageEnabled表达式在每次准备执行前重新评估,确保依赖状态的实时性。
内容的提问来源于stack exchange,提问作者Kate
相关产品推荐
相关产品推荐

