我已经看到了一系列与此主题相关的问题,但是没有一个问题提供任何可接受的解决方案(请不要加载外部Groovy脚本,不要调用sh
步骤等。)< / p>
我需要执行的操作是oneliner,但是管道限制使得无法用那种非语言编写任何有用的东西...
所以,这是最小的例子:
@NonCPS
def encodeProperties(Map properties) {
properties.collect { k, v -> "$k=$v" }.join('|')
}
node('dockerized') {
stage('Whatever') {
properties = [foo: 123, bar: "foo"]
echo encodeProperties(properties)
}
}
根据我是添加还是删除@NonCPS
注释,还是键入参数声明,错误会发生变化,但它永远不会给出发生的任何原因。它基本上是随机噪音,与现实情况相矛盾(有时它声称某些不相关的对象没有方法encodeProperties
,有时它会说它无法找到方法encodeProperties
带有没有人试图用它来签名的签名(比如两个参数而不是一个)等等。
通过阅读具有灾难性质量的文档,我有点理解,通常函数可能不是可序列化的,这就是为什么你需要向Groovy解释器明确地解释这个......对不起,这没有任何意义,但这大致就是文档所说的。
显然,尝试在collect
中使用stage
会产生大量新错误......至少可以理解的是,作者承认他们的Groovy版本没有实现大部分错误Groovy标准......
答案 0 :(得分:2)
这只是一个错字。您定义了encodeProp e rties,但称为encodeProprties。