Jenkinsfile构建日志

时间:2016-05-04 04:30:39

标签: jenkins jenkins-pipeline jenkins-workflow jenkinsfile

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

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

4 个答案:

答案 0 :(得分:7)

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

答案 1 :(得分:5)

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

  • 使用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只返回第一个匹配的匹配行)。所以我看到目前没办法,例如计算日志文件包含特殊字符串的频率。

答案 2 :(得分:2)

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

可以实现,相当容易,虽然它不能很好地扩展到庞大的构建。 JENKINS-28119将为我猜测您的基础请求提供更具可扩展性的解决方案。

答案 3 :(得分:0)

由于 Jenkins 为您提供了 BUILD_URL,您可以下载它:

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