一尘不染

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

jenkins

詹金斯版 2.89.4workflow
-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)

阅读 358

收藏
2020-07-25

共1个答案

一尘不染

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

自2017年8月以来已开放。看起来很快不会修复:

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

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

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

2020-07-25