簡體   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