Добавление регистратора в класс разделяемой библиотеки конвейера Jenkins - PullRequest
0 голосов
/ 20 сентября 2018

Попытка добавить регистратор в myClass.Я хочу видеть это в консоли Jenkins без использования "script.echo".

class myClass implements Serializable {
    def _logger
    def script
    myClass(def script, Map config) {
        _logger = script.getContext(TaskListener.class).getLogger()
        this.script = script
        this.config = config // some data
        log 'Initializing myClass...'
    }

    @NonCPS
    private void log(message) {
        _logger.println(message)
    }
...

def someMethod(){
    ...
    script.sh(someScript)
    ...
}
}

С этим кодом в консоли Jenkins я вижу:

Initializing myClass...                <<<<<<<<<<<<<<<<<
[Pipeline] sh
[test-job] Running shell script
[Pipeline] }
[Pipeline] // script
[Pipeline] }
[Pipeline] // stage
[Pipeline] }
[Pipeline] // node
[Pipeline] End of Pipeline
an exception which occurred:
    in field com.macys.devops.utils.myClass._logger
    in object com.macys.devops.utils.myClass@54e9341c
    in field com.cloudbees.groovy.cps.impl.BlockScopeEnv.locals
    ....
    in field com.cloudbees.groovy.cps.Continuable.e
    in object org.jenkinsci.plugins.workflow.cps.SandboxContinuable@4c564ac6
    in field org.jenkinsci.plugins.workflow.cps.CpsThread.program
    ...
    in object org.jenkinsci.plugins.workflow.cps.CpsThreadGroup@6b58d460
Caused: java.io.NotSerializableException: java.io.PrintStream

Когда я комментирую

this.script = script:

регистратор работает, но я не могу выполнять команды DSL (например, script.sh).

Что я делаюнеправильно?

1 Ответ

0 голосов
/ 22 сентября 2018

Попробуйте переместить создание логгера:

   _logger = script.getContext(TaskListener.class).getLogger()

в лог-метод:

@NonCPS private void log(message) { script.getContext(TaskListener.class).getLogger().println(message) }

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...