我为我的日志记录目的定义了一个帮助文件:
logger.groovy
import groovy.transform.Field @Field color = [ reset : "\033[0m", red : "\033[31m", green : "\033[32m", yellow : "\033[33m", blue : "\033[34m", magenta : "\033[35m", cyan : "\033[36m" ] def info(String str) { ansiColor() { println("${color.green}${str}") } }
然后我在我的主构建文件中使用它:
logger.info("Logging at info level")
logger.info("another log message")
正确地将我的文字显示为绿色(不能在这里模仿),但它也会打印很多垃圾:
输出:
[Pipeline] ansiColor [Pipeline] { [Pipeline] echo Logging at info level [Pipeline] } [Pipeline] // ansiColor [Pipeline] ansiColor [Pipeline] { [Pipeline] echo another log message [Pipeline] } [Pipeline] // ansiColor
如何让它禁用所有无关的源代码行?我想在我的主脚本中启用该功能,每次我想记录某些内容时我都不需要它。
我已经尝试过放入logger.groovy文件顶部的shebangs,但无济于事。我也在Windows上运行我的jenkins实例,这可能有助于解释原因。我也尝试将set +x
放在info()方法中,但这只会导致以下异常,这可能是由沙盒环境引起的
groovy.lang.MissingPropertyException: No such property: set for class: logger
我不知道为什么我这么难过。其他人只是处理它还是我做了一些与众不同的事情?
答案 0 :(得分:1)
https://github.com/jenkinsci/ansicolor-plugin#using-in-pipeline-workflows
TERM是当ansiColor块在范围内时设置为颜色映射的变量。如果TERM不为空,我们已经在ansiColor块中,因此我们不需要重新添加它。
所以这是我的ansicolor日志工作:
def info(String str) {
if (env.TERM) {
println("${color.green}${str}")
} else {
ansiColor {
println("${color.green}${str}")
}
}
}
我不知道是否有可能摆脱" echo"
的记录