当前位置: 首页 > 知识库问答 >
问题:

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

施旭东
2023-03-14

詹金斯·弗。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个答案

桂坚
2023-03-14

不确定这里的问题是什么(其他注释确实有效)。可能只适用于源代码生成注释。无论如何,对于任何非平凡的库来说,它都很可能使用Groovy语言的特性。抱歉,在管道脚本中通常不提供外来特性。在这个插件或工作流cps插件中都没有明确记录对Groovy类注释的支持不足(据我所见)https://github.com/jenkinsci/workflow-cps-plugin.

郭元明
2023-03-14

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

自2017年8月开始开放。看起来它不会很快被修复:

不确定是否有任何特定的地方Groovy语言支持(或缺乏)被详尽地记录下来,但无论如何,我不希望这个问题或类似的事情得到解决。未来的重点是允许外部流程执行,而不是在CPS引擎上浪费更多的时间,除非出现安全漏洞或严重倒退。

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

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

 类似资料:
  • 詹金斯·弗。2.89.4 workflow-cps ver 2.42 当我尝试运行一个加载库的管道时,我得到以下异常: 链接所引用的Groovy类: 您可以在管道或库中复制异常,如下所示:

  • 我有一个Groovy库作为全局共享库提供: 以及使用此库的Jenkins脚本化管道作业: 当作业运行时,我从获得以下输出,然后是的错误: 我很清楚,一些Jenkins插件已经依赖于httpcomponents,以下情况似乎是正确的: 我的注释导致所请求的http客户端版本被下载(如中观察到的)。 但是,Groovy库没有加载或使用该版本,而是依赖于Jenkins插件的其他版本。 而且,更恼人的是,

  • 我们试图切换到jenkins管道,但我在groovy/java的低水平阻止了我们建立一个共享库。 这里是我的共享库(位于bitbucket中git repo的{root}/src/com/pipeline.groovy中)我必须承认,我在这里做什么都不知道,因为我不知道包裹的定义 Jenkins的管道看起来 通过所有这些设置,我最终得到了错误: 我怀疑我的漂亮包裹的定义,但我坚持这样做。 非常欢迎

  • 我将我的Jenkins Pipeline存储为Jenkins共享库中的Groovy脚本。我想为不同的工作使用不同的版本。我的共享库脚本称为如下: 我已将sharedLib repo中的不同版本标记为。万一我想用v1。0,我用注释引用了它,如下所示。 在我的工作中,我通过调用groovy脚本访问了共享库,并使用了上面的注释,如图所示: 我运行这项工作时出错了。以下是我看到的错误。 当我使用。我哪里出

  • 我目前正在尝试从jenkins管道中的文件加载一个自定义groovy类。我尝试了这里提出的解决方案: 如何在Jenkins管道中导入类文件? 作为... JenkinsPipelineUtilityClass.groovy 詹金斯档案 并尝试同样使用GroovyClassLoader(再次使用上述类) 詹金斯档案 我在这两方面都遇到了同样的错误: 我已经检查了正在进行的脚本批准,里面什么都没有,我

  • 由于我无法访问组织中的“管理Jenkins”菜单,我无法在“管理Jenkins”中的“全局管道库”中配置共享库。 没有在Manage Jenkins中进行配置,是否有其他方法实现此功能? (或) 是否可以通过管道脚本配置“全球管道库”部分,而不管访问权限如何? 如果可能,请您在答案中共享一些代码片段。