当前阶段的Spinnaker管道表达式是什么?

时间:2018-08-07 19:16:04

标签: spring-el spinnaker

我正在尝试编写一个Spinnaker管道表达式,该表达式根据当前阶段及其祖先确定一些条件。根据文档,您可以使用the #root helper获取当前阶段 context ;但是,似乎没有任何方法可以获取当前的 stage

例如,如果您想确定当前阶段是否有任何处于失败状态的祖先,那么现在您必须知道阶段名称,考虑到#root的存在,这似乎是违反直觉的。

${ #stage("My Stage").ancestors().?[status.isFailure() && name != "My Stage"] }

我想将#stage("My Stage")替换为 #root ,但是#root还是上下文对象在舞台内部,而不是舞台本身。

请注意,the Stage.ancestorsOnly() method目前还处于私有状态,因此,如果您要查找仅祖先​​失败(或具有其他条件),则需要手动排除当前阶段。这就是为什么我在那里有额外的name比较。

1 个答案:

答案 0 :(得分:0)

SPEL中的root和#this只是别名,当您需要引用过滤器之类的地方使用的当前对象时,我不会太着急。

这里也许正确的做法是向我们根据https://github.com/spinnaker/orca/blob/7de225679cf19cbcbfcfdbdcd08dc1962247f0fe/orca-core/src/main/java/com/netflix/spinnaker/orca/pipeline/util/ContextParameterProcessor.java#L90评估SPEL的增强上下文中添加一些其他值,以包括诸如阶段ID之类的值,以便添加诸如#currentStage()或#ancestorStaget()在https://github.com/spinnaker/orca/blob/fc87a8e99ec59a4e129646026987aa5adbde2d31/orca-core/src/main/java/com/netflix/spinnaker/orca/pipeline/expressions/ExpressionsSupport.java#L60

这里存在一些细微的问题,因为阶段表达式是在阶段运行之前进行求值的,因此对于诸如祖先之类的静态值应该没问题,但是对于诸如status之类的值,您得到的值将不会更新