Jenkins 管道图正在转换为数组,但我认为它太大了?

问题描述 投票:0回答:1

我正在尝试添加一个巨大的属性图(不,重构不是纠正我团队糟糕决定的选项)初始化函数。

流程与这个简化示例基本相同:

file1.groovy 有:

def call(Map opts = [:]) {
    opts = file2(opts)
    // do some stuff with the opts...
}

file2.groovy 有大量令人讨厌的选项默认语句,如下所示:

def call(Map opts = [:]) {
    opts.something = opts.something ?: true
    opts.something2 = opts.something ?: false
}

我试图在运行时添加几个选项,但出现以下错误:

org.jenkinsci.plugins.workflow.actions.ErrorAction$ErrorId: 6e0ca570-b8b5-4c4b-93bb-e3d5661c1294
java.lang.NoSuchMethodError: 'java.lang.Object[] org.codehaus.groovy.runtime.ArrayUtil.createArray(java.lang.Object, java.lang.Object, java.lang.Object, java.lang.Object,

“java.lang.Object”只持续了大约 20 行。

我做了一些查找,显然 createArray 函数有 250 个对象的限制。

但是,我的主要问题是(在幕后,我假设)createArray 在描述的流程中是如何被调用的?映射是否会转换为数组以在函数之间传递,这与 CPS 有关吗?

假设不可能重新设计这个糟糕的系统,有没有办法解决这个问题?

我需要在地图上添加 5 个项目,如果我注释掉其中 2 个,它就可以正常工作。

jenkins groovy jenkins-pipeline
1个回答
0
投票

你说得对,这与CPS有关,添加

@NonCPS
即可解决。

@NonCPS
def call(Map opts = [:]) {
    opts.something = opts.something ?: true
    opts.something2 = opts.something ?: false
}
© www.soinside.com 2019 - 2024. All rights reserved.