3

こんにちは、私には問題があり、それを理解できないようです。

そのため、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 で実行すると、静的メソッドまたは通常のメソッドのいずれも表示/実行されません。現在実行中のコンテキストに何らかの方法でクラスを注入する必要がありますか、それとも何か他のことをする必要がありますか?

また、github バージョンのジョブ dsl プラグインと gradle を使用して、コマンド ラインからこれとまったく同じスクリプトを実行すると、スクリプトはメソッドを呼び出すことにも注意してください。

4

1 に答える 1

7

runItスクリプトで (この例では、関数で) println を使用する場合、Groovyoutは、スクリプトのバインディングで定義された変数、または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);
于 2015-06-18T08:22:52.363 に答える