groovy - 在 jenkins job dsl 中使用类

标签 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 运行此作业时,它不会显示/执行静态或正常方法。我是否需要以某种方式在当前运行的上下文中注入(inject)类或执行其他操作?

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

最佳答案

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

在类中使用 println 时(在您的示例中,TestIt 类),将调用 System.out.println。所以输出被发送到标准输出。根据您启动 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);

关于groovy - 在 jenkins job dsl 中使用类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30909486/

相关文章:

jenkins - 作业 DSL 插件与管道插件

gradle - 是否有用于定义 Gradle-Artifactory 插件配置的 jenkins job-dsl block /代码?

testing - soapUI:如何从断言脚本访问测试步骤属性?

java - 如何使用 Gradle 的 CreateStartScripts 任务

jenkins - 错误 : Could not find credentials entry with ID '${TEST}'

jenkins - 导出和导入 Jenkins Pipeline 脚本批准

grails - 通过 Intelli-J 启动 grails-app 并将 root 设置为 localhost :8080/instead of localhost:8080/app, 或修改 createLink?

string - Groovy:在字符串中转义大括号

windows - 在 Jenkins Windows 从节点上无法识别“mvn”命令

jenkins - 通过种子作业创建后立即启动 jenkins 作业