将参数传递给全局共享库-构造函数

时间:2018-07-19 16:16:38

标签: jenkins jenkins-pipeline jenkins-groovy

我有一个简单的问题: 我有一个全局(非沙盒)/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文档太糟糕了,令人尴尬。通常,将参数传递给构造函数是您期望得到记录的...

2 个答案:

答案 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
}