17

是否有任何内置变量可以访问当前正在执行的构建的文本?

我尝试使用类似的东西currentBuild.logcurrentBuild.buildLog但没有任何运气。

4

4 回答 4

17

实际上可以使用currentBuild.rawBuild.log或更好(不推荐使用)currentBuild.rawBuild.getLog(100)(对于最后 100 行),参考:http: //javadoc.jenkins-ci.org/hudson/model/Run.html#getLog-int-

于 2016-07-18T18:57:03.370 回答
10

我搜索了很多用于分析日志的解决方案。

  • 使用rawBuild不好,因为我想在沙箱中执行我的脚本而无需额外的批准
  • 在步骤中使用tee,我想分析的不好,因为我不想修改前面的步骤,也不想让我的整个日志在 RAM 中(不幸的是我需要在 Windows 机器上)

我找到了一个受 Jesse Glicks 回答启发的解决方案:

  • 在 my.jenkins.url/pipeline-syntax/globals 下,您可以看到manager-variable 允许您使用manager.logContains(regexp)或分析日志manager.getLogMatcher(regexp)
  • 因此,如果您只想检查,您的日志是否包含myTestString您可以调用的字符串manager.logContains('.*myTestString.*')
  • 如果您想从第一个匹配行中获取一些信息,您可以使用manager.getLogMatcher(regexp)

不幸的是,我发现无法分析整个日志(getLogMatcher仅返回匹配器的第一个匹配行)。所以我认为目前没有办法计算日志文件包含特殊字符串的频率。

于 2016-10-05T12:18:51.263 回答
3

不是现在。currentBuild(顺便说一下,在Snippet Generator » Global Variables下记录了 的属性。)

可以相当容易地实现,尽管它不能很好地适应大型构建。JENKINS-28119将为我猜测您的基本请求提供更具可扩展性的解决方案。

于 2016-05-05T11:35:18.580 回答
1

由于詹金斯给你BUILD_URL,你可以下载它:

sh('wget -q --no-check-certificate -O build.log ' + BUILD_URL + 'consoleText')
于 2021-04-13T05:30:39.667 回答