如何在Jenkinsfile中定义和调用函数?

时间:2017-11-16 17:04:08

标签: groovy jenkins-pipeline

我已经看到了一系列与此主题相关的问题,但是没有一个问题提供任何可接受的解决方案(请不要加载外部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标准......

1 个答案:

答案 0 :(得分:2)

这只是一个错字。您定义了encodeProp e rties,但称为encodeProprties。