Jenkinsfile构建日志

Krz*_*soń 12 jenkins jenkins-workflow jenkins-pipeline jenkinsfile

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

我试过用类似的东西currentBuild.log,currentBuild.buildLog但没有运气.

Krz*_*soń 10

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

  • 对于 1.652 多分支管道,这是行不通的:( `org.jenkinsci.plugins.scriptsecurity.sandbox.RejectedAccessException: 脚本不允许使用方法 hudson.model.Run getLog int` 和 my.jenkins.site/scriptApproval/ 页面甚至没有显示出来。我自己仍在寻找这个令人烦恼的问题的答案 (4认同)

Ser*_*fel 8

我进行了大量搜索,以寻找一种分析日志的解决方案。

  • 使用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仅返回第一个匹配行Matcher)。因此,我目前看不到任何方法来计算日志文件包含特殊字符串的频率。

  • 截至2018年8月,jenkins / pipeline-syntax / globals中不再包含“ manager”。但是,“ currentBuild”具有具有getLog(int)的rawBuild属性。 (2认同)