Jenkins DSL技术咨询:如何获取阶段日志并提取失败错误日志
Jenkins DSL 获取失败阶段的错误日志
你可以通过Jenkins内部API实现仅提取失败阶段的日志,无需输出全部控制台内容,具体实现如下:
核心思路
借助Jenkins的StageResultAction获取所有阶段的执行信息,筛选出结果为失败的阶段,再通过日志行号范围提取对应阶段的日志内容。
代码示例
// 获取阶段结果对应的Action(依赖Stage View Plugin) def stageResultActions = currentBuild.getRawBuild().getActions( hudson.plugins.pipeline.stagegraphview.StageResultAction.class ) if (stageResultActions) { // 遍历所有阶段节点 stageResultActions[0].getStageNodes().each { stageNode -> // 判断阶段是否失败 if (stageNode.getResult() == hudson.model.Result.FAILURE) { println "=== 失败阶段:${stageNode.getName()} ===" // 获取该阶段日志的起止行号 def startLine = stageNode.getLogStart() def endLine = stageNode.getLogEnd() if (startLine != null && endLine != null) { // 提取并打印该阶段的日志 def failureLogs = currentBuild.getRawBuild().getLog(startLine, endLine) failureLogs.each { line -> println line } } } } }
注意事项
- 确保Jenkins已安装Stage View Plugin,否则无法获取
StageResultAction实例。 - 使用
getRawBuild()需要脚本拥有足够权限,需在Jenkins全局安全配置中开启「允许脚本访问Jenkins内部API」。 - 若阶段日志起止行号不准确,可尝试直接解析控制台日志,通过匹配阶段的开始(如
Started stage 'XXX')和结束标记(如Finished stage 'XXX')提取对应片段,但这种方式稳定性不如API。
内容的提问来源于stack exchange,提问作者Oded
相关产品推荐
相关产品推荐

