繁体   English   中英

管道共享库jenkins不支持Groovy @Delegate类注释

[英]Groovy @Delegate class annotations are not supported in the pipeline shared library jenkins

詹金斯版 2.89.4
工作流CPS版本2.42

当我尝试运行加载库的管道时,出现以下异常:

Unsupported expression for CPS transformation @ line -1, column -1

引用链接的Groovy类:

final class Bindings implements Serializable{
    @Delegate
    private final Map map

    Bindings(Map map) {
        this.map = map
    }

    @Override
    boolean containsKey(Object key) {
        return true
    }

    @Override
    Object get(Object key) {
        return map.getOrDefault(key, null)
    }
}

您可以像这样在管道或库中重现异常:

def map = ["key":"value"]
Bindings bindings = new Bindings (map) 

不能立即确定这里的问题是什么(其他注释确实起作用)。 也许仅适用于源生成的注释。 无论如何,对于任何非平凡的库,它很可能都将使用Groovy语言功能。对不起,但管道脚本中通常不提供外来功能。 在该插件中或在工作流cps-plugin https://github.com/jenkinsci/workflow-cps-plugin中,都没有明确记录(据我所知)对Groovy类注释的缺乏支持。

这是詹金斯的一个已知问题: JENKINS-45901

该服务自2017年8月开始开放。看来它不会很快得到修复:

不知道是否有任何特定的地方详尽记录了Groovy语言支持(或缺乏),但是无论如何我都不希望这个问题或类似的东西得到解决。 今后的工作重点是允许外部流程执行,不要在CPS引擎上浪费更多时间,除非存在安全漏洞或严重倒退的情况。

我尝试了@Delegate@NonCPS的组合,但是后者似乎对字段没有任何影响。

您必须自己实现委托方法或尝试其他解决方案。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM