Jenkinsfile构建日志

20

有没有内置变量可以访问当前正在执行的构建的文本内容?

我尝试使用类似于currentBuild.logcurrentBuild.buildLog但是没有成功。

4个回答

21

4
使用1.652多分支管道,出现了问题 :( org.jenkinsci.plugins.scriptsecurity.sandbox.RejectedAccessException: Scripts not permitted to use method hudson.model.Run getLog int,而且my.jenkins.site/scriptApproval/页面甚至没有显示它。我仍在寻找解决这个烦人问题的答案。 - Jason De Arte
@JasonDeArte - 你在当前的Jenkins LTS和当前插件版本上尝试过这个吗? - BitwiseMan
我花了很长时间才找到这个答案。这提供了一种告诉我们构建是否被中止的方法,而这还没有得到明确的提供 - https://issues.jenkins-ci.org/browse/JENKINS-28822 - Display Name is missing
1
我该如何获取当前构建的所有日志?currentBuild.rawBuild.getLog(100)可以工作,但是currentBuild.rawBuild.getLog()不起作用(为空),而我希望能够获取所有日志。 - DenCowboy

11

我为分析日志的解决方案搜索了很多内容。

  • 使用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仅返回第一个匹配行的Matcher)。因此,目前我无法计算日志文件包含特定字符串的次数。


3
自2018年8月起,在jenkins/pipeline-syntax/globals中已不再有"manager"。但是现在有一个名为"currentBuild"的对象,它具有一个名为rawBuild的属性,该属性具有getLog(int)方法。 - Andrey Regentov

4
目前不行。顺便提一下,currentBuild的属性在片段生成器»全局变量下有文档记录。虽然这样做会在大型构建中不利于扩展,但它可以被相对容易地实现。我猜您的根本请求是由JENKINS-28119提供了更可扩展的解决方案。

实际上,我正在尝试解析日志以检索所有已部署的构件(mvn clean deploy),并且如果服务器测试失败,我希望从Nexus存储库中删除这些构件。目前对我来说最简单的方法是解析日志以获取*Uploaded: http.....*文本,并在它们上执行HTTP DELETE操作。 - Krzysztof Krasoń
如果您正在使用某些可访问的变量(例如构建编号或git提交)对已部署的工件进行版本控制,则可以通过使用该变量构建工件名称来删除它们。但是,如果您要发布数百个工件,则这种方法可能不太适用。 - Mark Chorley
1
然后只需执行 sh 'mvn clean deploy | tee logs'; def logs = readFile 'logs' 而不尝试访问整个_build_的日志。 - Jesse Glick

1

Jenkins提供BUILD_URL,您可以下载它:

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

请注意,仅当允许匿名读取 Jenkins 构建时,此方法才有效。但是,这可能比使用 currentBuild.rawBuild.log 并允许脚本访问 rawBuild 更好。 - Axel Heider

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接