[英]Reuse groovy object / class in jenkins pipeline - shared library
[英]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.