【问题标题】:using classes in jenkins job dsl在jenkins job dsl中使用类
【发布时间】:2017-01-29 17:52:32
【问题描述】:

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

所以我创建了一些辅助类供我的 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 版本,那么脚本确实会调用方法。

【问题讨论】:

    标签: groovy jenkins jenkins-job-dsl


    【解决方案1】:

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

    在类中使用 println 时(在您的示例中,TestIt 类),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);
    

    【讨论】:

    • 谢谢,这就是我重新开始所需要的。对于不了解 groovy 的人(我主要是 C++),缺乏文档。我会看看我是否可以将此添加到 github 上的 wiki 以供其他用户使用。
    • 下一个 Job DSL 版本将有一个关于登录文档的部分,请参阅github.com/jenkinsci/job-dsl-plugin/pull/512
    猜你喜欢
    • 1970-01-01
    • 2022-09-23
    • 2020-02-06
    • 1970-01-01
    • 2016-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多