簡體   English   中英

在詹金斯工作DSL中使用類

[英]using classes in 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版本從命令行運行此完全相同的腳本,則該腳本會調用方法。

在腳本中使用println(在您的示例中,在runIt函數中)時,Groovy會將調用發送到腳本綁定中定義的out變量,如果未設置該變量,則將其發送到System.out.println Job DSL插件會設置此變量,以便輸出進入構建日志。

在類(在您的示例中為TestIt類)中使用println時,將調用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);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM