我有一个简单的问题:
我有一个全局(非沙盒)/src
库-utils
我需要将参数传递给建筑上的工具
@Library("Woop")
def utils = new a.b.c.d.Utils(Script::this)
有效,脚本参考存放在:
public class Utils implements Serializable {
Script script
如果我尝试添加参数:
@Library("Woop")
def utils = new a.b.c.d.Utils(Script::this, 3)
并更改实用程序以添加int
public class Utils implements Serializable {
Script script
int three
我得到:
org.jenkinsci.plugins.scriptsecurity.sandbox.RejectedAccessException:
unclassified new a.b.c.d.Utils java.util.LinkedHashMap java.lang.Integer
对于如何传递多个参数以及如何接受多个参数,我不确定。我所能做的就是GUESS,它效率极低且令人沮丧。
有一个通过\vars\Abc.Groovy
访问的文件夹库@Library('Project') _
,我如何将该库传递给共享的全局库?
假设我们解决了最初的问题,我只是打电话给
new a.b.c.d.Utils(Script::this, Abc)
或
new a.b.c.d.Utils(Script::this, Abc.class)
?
应该如何在Utils类中定义它?
我不清楚,因为Abc
应该是class Abc
的静态实例,所以我在这里感到困惑... :-(
Jenkins文档太糟糕了,令人尴尬。通常,将参数传递给构造函数是您期望得到记录的...
答案 0 :(得分:2)
这不是管道或cpsLibrary问题。要使用命名参数在Groovy中调用构造函数,您必须使用:
new a.b.c.d.Utils(script: this, three: Abc)
尽管到目前为止,我从未在刚刚尝试过的cps代码中使用命名参数,但它确实可以工作。 也可以看看: Groovy could not find matching constructor?
答案 1 :(得分:0)
如果您进行更改,它可能会起作用:
int three
到
Integer three
在您的Utils类中。否则,我将尝试显式添加构造函数,如下所示:
Utils(Script s, Integer i) {
script = s
three = i
}