【问题标题】:How do I import a class using GroovyScript and Jenkins?如何使用 GroovyScript 和 Jenkins 导入类?
【发布时间】:2019-06-19 19:26:24
【问题描述】:

我在一个 groovy 文件中有以下内容...

// jenkins/Application.groovy
package jenkins

class Application{
    String name
    Application(name){
        this.name = name
    }
}

我正在尝试导入它,我已经尝试了这些,但似乎没有一个有效。这些都在 jenkins/Test.groovy

final GroovyScriptEngineImpl engine = (GroovyScriptEngineImpl) this.scriptingEngines.getEngineByName("groovy");
GroovyClassLoader classLoader = engine.getClassLoader();
classLoader.parseClass(new GroovyCodeSource("./jenkins/Application.groovy"))
engine.setClassLoader(classLoader)

这给了..

Script1.groovy: 17: 无法解析类应用程序

然后我尝试了...

// jenkins/Application.groovy
// Added
return { Application }
// jenkins/Test.groovy
app = load "./jenkins/Application.groovy"

def dna = new app.Application("blah")

我得到...

Script1.groovy: 11: 无法解析类 app.Application

如何在 Jenkins GroovyScript 中导入调用?

更新

我将代码更改为以下内容(并移至域文件夹中)...

app = load "./jenkins/domain/Application.groovy"
def dna = app.newInstance([name:"blah"] as Object[])

当我跑步时,我得到...

org.jenkinsci.plugins.scriptsecurity.sandbox.RejectedAccessException:脚本不允许使用 staticMethod org.codehaus.groovy.runtime.DefaultGroovyMethods newInstance java.lang.Class java.lang.Object[]

【问题讨论】:

标签: jenkins groovy


【解决方案1】:

想法

您可以从加载的脚本中返回 - 类(不是实例)

然后要创建新实例,您可以调用class.newInstance( Object [] argList )

http://docs.groovy-lang.org/latest/html/groovy-jdk/java/lang/Class.html#newInstance(java.lang.Object[])

所以,理论上这应该可行:

./jenkins/Application.groovy


class Application{
    String name
    Application(name){
        this.name = name
    }
}

return Application.class

管道:

def app = load "./jenkins/Application.groovy"
def dna = app.newInstance( "blah" )

【讨论】:

  • 谢谢!知道如何在构造函数中使用该类型吗?我知道 groovy 没有输入,但我希望我可以使用它
  • 在管道中获取 [ERROR] 异常:没有方法签名:java.lang.Class.newInstance() 适用于参数类型:(java.util.ArrayList) 值:[[103740]]可能的解决方案:newInstance()、newInstance()、newInstance([Ljava.lang.Object;)、isInstance(java.lang.Object)
  • 对于您的更新,有一个标准解决方案 - 管理员。
  • 不确定我是否遵循这是否意味着管理员必须配置某些内容,因为这可能不会发生
  • 这是相当标准的安全问题。只需在 Internet 上搜索即可。 Jenkins 限制调用某些方法。 stackoverflow.com/questions/38276341/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多