在jenkins job dsl中使用类

时间:2015-06-18 07:50:18

标签: groovy jenkins jenkins-job-dsl

大家好我有问题而我似乎无法解决这个问题。

所以我为我的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版本,那么脚本会调用方法。

1 个答案:

答案 0 :(得分:6)

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

在类中使用println时(在您的示例中,TestIt类),将调用System.out.println。所以输出发送到stdout。根据你如何开始詹金斯,stdout就像是记录控制台或/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);