3

大家好,我有一个问题,我似乎无法弄清楚。

所以我正在为我的 dsl 创建一些辅助类来使用,但它似乎并没有在这些类中执行任何方法。

我创建了一个包含以下 dsl 的工作:

class TestIt {
  def static helloStatic() {
    println "[STATIC] - Hello"
  }

  def hello() {
    println "[NORMAL] - Hello"
  }
}

def runIt() {
  println "Starting test"
  println "-------------"
  TestIt _test = new TestIt()
  _test.hello();
  TestIt.helloStatic();
  println "-------------"
  println "Done"
}

runIt();
TestIt.helloStatic();

当我使用 jenkins 运行此作业时,它不会显示/执行静态或普通方法。我是否需要以某种方式在当前运行的上下文中注入类或做其他事情?

另请注意,如果我从命令行运行这个完全相同的脚本,使用作业 dsl 插件和 gradle 的 github 版本,那么脚本会调用这些方法。

4

1 回答 1

7

在脚本中使用 println 时(在您的示例中,在runIt函数中),Groovy 将调用发送到out脚本绑定中定义的变量,或者System.out.println如果该变量未设置,则发送到该变量。Job DSL 插件设置此变量,以便输出进入构建日志。

在类(在您的示例中为TestIt类)中使用 println 时,System.out.println将被调用。所以输出被发送到标准输出。根据您启动 Jenkins 的方式,标准输出会记录在控制台或/var/log/jenkins/jenkins.log.

要将类的输出发送到构建日志,您需要将out变量传递给您的类:

class TestIt {
  def out

  def static helloStatic(def out) {
    out.println "[STATIC] - Hello"
  }

  def hello() {
    out.println "[NORMAL] - Hello"
  }
}

def runIt() {
  println "Starting test"
  println "-------------"
  TestIt _test = new TestIt(out: out)
  _test.hello();
  TestIt.helloStatic(out);
  println "-------------"
  println "Done"
}

runIt();
TestIt.helloStatic(out);
于 2015-06-18T08:22:52.363 回答