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

时间:2018-05-15 17:31:08

标签: jenkins groovy jenkins-pipeline

詹金斯诉。 2.89.4
workflow-cps ver 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) 

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

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

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

  

不确定是否有详尽的文档记录了Groovy语言支持(或缺乏它),但是无论如何我都不希望这个问题或类似的东西得到解决。今后的工作重点是允许外部流程执行,而不是在安全漏洞或严重回归的情况下在CPS引擎上浪费更多时间。

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

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