代码之家  ›  专栏  ›  技术社区  ›  Travis Illig

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

  •  1
  • Travis Illig  · 技术社区  · 6 年前

    the #root helper 以获得当前阶段 上下文 ; 但是,似乎没有任何方法可以获得当前的 .

    例如,如果您想知道当前阶段是否有任何祖先具有失败状态,那么现在您必须知道阶段名称,考虑到存在 #根

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

    我想换新的 #stage("My Stage") 类似 #根 然而,再一次 是阶段内的上下文对象,而不是阶段本身。

    the Stage.ancestorsOnly() method 现在是私人的所以如果你想找 只有祖先 如果失败(或有其他条件),则需要手动排除当前阶段。所以我才有多余的 name 比较一下。

    1 回复  |  直到 6 年前
        1
  •  0
  •   Community CDub    5 年前

    root和#this in SPEL只是别名,当您需要引用过滤器等地方使用的当前对象时,我不会太在意它。

    也许这里正确的做法是为我们评估SPEL所依据的增强上下文添加更多的值 https://github.com/spinnaker/orca/blob/7de225679cf19cbcbfcfdbdcd08dc1962247f0fe/orca-core/src/main/java/com/netflix/spinnaker/orca/pipeline/util/ContextParameterProcessor.java#L90 https://github.com/spinnaker/orca/blob/fc87a8e99ec59a4e129646026987aa5adbde2d31/orca-core/src/main/java/com/netflix/spinnaker/orca/pipeline/expressions/ExpressionsSupport.java#L60

    这里有一些微妙的问题,因为stage表达式是在stage运行之前计算的,所以对于像祖先这样的静态值应该可以,但是对于像status这样的值,您得到的值不会被更新