试图将记录器添加到 myClass。我想在不使用“script.echo”的情况下在 Jenkins 控制台中看到它。
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:
logger 可以工作,但我无法执行 DSL 命令(例如 script.sh)。
我做错了什么?
最佳答案
尝试移动记录器创建:
_logger = script.getContext(TaskListener.class).getLogger()
记录方法:
@NonCPS
private void log(message) {
script.getContext(TaskListener.class).getLogger().println(message)
}
关于class - 将记录器添加到 Jenkins 管道共享库类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52431474/