Groovy-скрипт в выводе jenkins println исчезает при вызове внутри среды класса - PullRequest
17 голосов
/ 12 октября 2011

Выходные данные println из функции класса потеряны.

Пример сценария (outputclass.groovy):

class OutputClass
{
    OutputClass()
    {
        println("Inside class")  // This will not show in the console
    }
}

println("Outside class")  // Only this is shown in the console
output = new OutputClass()

Я использую CLI Jenkins для выполнения Groovy-сценария

java -jar ..\jenkins-cli.jar -s JENKINS_SERVER_URL groovy outputclass.groovy

Он выводит только это:

Внешний класс

Кажется, что класс косвенно использует println из System.out.println и System.out направляется в файлы журнала, но println вне класса использует что-то еще, что выводится в консоли сценария.В следующем коде показано поведение.

System.out.println("First")
println("Second")

Вывод:

Секунда

Как явно настроить устройство вывода для вывода на Jenkinsконсоль сценария?

Ответы [ 3 ]

22 голосов
/ 13 октября 2011

Я сам нашел решение здесь http://mriet.wordpress.com.

Когда запускается плагин Groovy, он передает две привязки скрипту. Из привязок мы можем получить переменную out . Получите его и используйте out.println для вывода на консоль сценария, а не просто println.

Сценарий ниже показывает полное решение.

import hudson.model.*

// Get the out variable
def out = getBinding().out;

class OutputClass
{
    OutputClass(out)  // Have to pass the out variable to the class
    {
        out.println ("Inside class")
    }
}

out.println("Outside class")
output = new OutputClass(out)
3 голосов
/ 22 апреля 2016

Если вы используете скрипт в качестве шага пост-сборки (я не уверен, работает ли он с упомянутым CLI), вы можете использовать встроенный логгер:

manager.listener.logger.println("some output")

Так что в вашем случае что-то вродеэто может быть полезно:

class OutputClass
{
    OutputClass(logger)  // Have to pass the out variable to the class
    {
         logger.println ("Inside class")
    }
}

output = new OutputClass(manager.listener.logger)

См. также Пример 10 в Groovy Plugin Doc

0 голосов
/ 12 октября 2011

Помогает ли это сообщение в списке рассылки ?

вывод отправляется на стандартный вывод, поэтому, если вы проверите файл журнала, вы, вероятно, увидите что-то вроде этого:[STDOUT] Hello World

если вы настаиваете на использовании системного скрипта, вы должны передать переменную вашему классу, так как привязка не видна внутри класса (поэтому она передается в стандартный вывод).Вы должны использовать что-то вроде этого

public class Hello {
  static void say(out) {
    out << "Hello World "
  }
}
println "Started ..."
Hello.say(out)
...