抑制verbose ansicolor命令到jenkins控制台输出

时间:2017-12-28 00:13:59

标签: groovy jenkins-pipeline jenkins-groovy

我为我的日志记录目的定义了一个帮助文件:

  

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

我不知道为什么我这么难过。其他人只是处理它还是我做了一些与众不同的事情?

1 个答案:

答案 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"

的记录