Groovy 在 Jenkins 中进行后期构建,解析日志中的字符串并对它们进行计数

Groovy Postbuild in Jenkins, parsing the log for strings and counting them

我是 Groovy 的新手,我正在尝试在 Jenkins 中设置一个后期构建,它允许我对字符串进行计数,并根据最后的计数 returns 来确定构建是否成功。

这是我的示例代码:

class Main {

  def manager = binding.getVariable("manager")
  def log = manager.build.logFile.text
  def list = log
  def JobCount = list.count {it.startsWith("====") && it.contains("COMPLETE")}
  if (JobCount == 7) {
      manager.listener.logger.println("All Jobs Completed Successfully")
  } else {
      manager.addWarningBadge("Not All Jobs Have Completed Successfully")
      manager.buildUnstable()  
  }
}

我正在寻找测试成功完成后打印到控制台的特定字符串。字符串是“====JOB COMPLETE====”,如果所有 7 个测试都正确通过,我应该有这个字符串的 7 个实例。

当前,当我 运行 此代码时,我收到以下错误:

Script1.groovy: 6: unexpected token: if @ line 6, column 5.
   if (JobCount == 7)
   ^

如有任何帮助,我们将不胜感激

也许你错过了结束语}

def JobCount = list.count {it.startsWith("====") && it.contains("COMPLETE")}

manager.build.logFile.text returns 整个文件文本为字符串。

你需要的是readLines():

def list = manager.build.logFile.readLines()
def JobCount = list.count {it.startsWith("====") && it.contains("COMPLETE")}

当然如下所述,Jenkins Groovy Postbuild 插件运行 Groovy 脚本,因此您将摆脱封闭的 class 声明(Main )

您的 class 中直接有语句,而没有在方法中,这在 Java/Groovy 中是不允许的。由于这是 Groovy,您可以将其 运行 作为完全没有 class 的脚本,或者将有问题的代码(if 语句)放入方法中并调用方法。