【问题标题】:What is the Spinnaker pipeline expression for the current stage?当前阶段的 Spinnaker 管道表达式是什么?
【发布时间】:2018-08-07 19:16:03
【问题描述】:

我正在尝试编写一个 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 比较。

【问题讨论】:

    标签: spring-el spinnaker


    【解决方案1】:

    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

    这里有一些微妙的问题,因为阶段表达式在阶段运行之前被评估,所以对于像祖先这样的静态值应该没问题,但对于像状态这样的值,你得到的值不会被更新

    【讨论】:

    • #root 绝对是一个有效的别名,但 #this 在 Spinnaker 管道表达式中似乎没有任何意义。我尝试了${ this }${ #this } 尝试从它们那里读取属性,例如${ this.name }${ #this.name },但没有运气。
    • 或者是答案,此时,“没有表达式可以访问当前管道阶段?”
    • 您只能访问舞台上下文,而不能访问表达式中的任何其他内容。如果您希望改进这一点,您可以提交 PR,我们很乐意为您提供帮助
    • 我明白了。您对#this 的引用令人困惑,感谢您的澄清。如果您将答案更新为更加清晰(即特别指出您只能获得上下文而不是实际阶段),我很乐意将其标记为答案并给予您信任。感谢您的帮助!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-02
    相关资源
    最近更新 更多