在jenkins job dsl中使用类

Ale*_*ong 2 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();
Run Code Online (Sandbox Code Playgroud)

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

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

das*_*ker 6

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

在类中使用println(在您的示例中,TestIt类),System.out.println将被调用.所以输出发送到stdout.根据你如何启动Jenkins,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);
Run Code Online (Sandbox Code Playgroud)