Jenkinsfile 构建日志
Jenkinsfile build log
是否有任何内置变量可以访问当前正在执行的构建的文本?
我尝试使用 currentBuild.log
、currentBuild.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')
是否有任何内置变量可以访问当前正在执行的构建的文本?
我尝试使用 currentBuild.log
、currentBuild.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')