Jenkinsfile 构建日志

Jenkinsfile build log

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

我尝试使用 currentBuild.logcurrentBuild.buildLog 之类的东西,但没有成功。

目前没有。 (currentBuild 的属性记录在 代码生成器 » 全局变量 下。)

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

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

我搜索了很多解决方案来分析日志。

  • 使用 rawBuild 不可行,因为我想在没有额外批准的情况下在沙箱中执行我的脚本
  • 在我想分析的步骤中使用 tee 是不行的,因为我不想修改之前的步骤,也不想让我的整个日志都在 RAM 中(并且不幸的是我需要在 Windows 机器上)

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

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

不幸的是我找不到分析整个日志的方法(getLogMatcher returns 只有第一个匹配行 Matcher)。所以我认为目前没有办法,例如计算日志文件包含特殊字符串的频率。

既然Jenkins给了你BUILD_URL,你可以下载:

sh('wget -q --no-check-certificate -O build.log ' + BUILD_URL + 'consoleText')