jekins的日志文件获取分析错误 从Jenkins 的日志文件中找出 SSH 执行结果里的error。Jenkins 构建日志默认存储在 Jenkins 主目录下路径格式为Linux:/var/jenkins_home/jobs/JobName/builds/BuildNumber/log或通过 Jenkins API 获取方案一在 Pipeline 中直接读取当前构建日志groovystage(Check Log for Errors) { steps { script { // 获取当前构建的日志内容 def logContent currentBuild.rawBuild.getLog(10000) // 读取最近10000行 // 查找包含 error 的行 def errorLines logContent.findAll { line - line.toLowerCase().contains(error) } if (errorLines) { echo ⚠️ 在构建日志中发现 ${errorLines.size()} 处 error errorLines.each { line - echo ${line} } currentBuild.result UNSTABLE // 或 FAILURE } } } }方案二使用 Jenkins API 获取日志外部脚本bash# 获取最新构建日志 curl -u user:token http://jenkins-server/job/JobName/lastBuild/consoleText build.log # 用 grep 找出 error grep -i error build.log # 或统计 error 数量 grep -ic error build.log方案三在 Pipeline 中把 SSH 输出单独记录到文件这是最推荐的做法——把 SSH 执行结果单独写入文件便于后续分析groovystage(SSH Execute Log Analysis) { steps { script { // 执行远程命令捕获输出 def sshOutput sshCommand( remote: [ name: prod-server, host: 192.168.1.100, user: deploy, identityFile: /var/jenkins_home/.ssh/id_rsa ], command: sh /path/to/deploy.sh ) // 写入文件到工作区 writeFile file: ssh_output.log, text: sshOutput // 分析输出中的 error def errorLines sshOutput.readLines().findAll { line - line.toLowerCase().contains(error) } if (errorLines) { echo ❌ 发现错误 errorLines.each { echo it } // 归档日志文件 archiveArtifacts artifacts: ssh_output.log error(SSH 执行结果包含 error构建终止) } else { echo ✅ SSH 执行成功无 error } } } }方案四读取历史构建日志文件如果你想读取之前的某次构建日志groovystage(Analyze Historical Build) { steps { script { // 指定构建号 def buildNumber 42 def job Jenkins.instance.getItemByFullName(YourJobName) def build job.getBuildByNumber(buildNumber) // 读取该构建日志 def logContent build.getLog(10000) // 过滤 error def errors logContent.findAll { it.toLowerCase().contains(error) } echo Build #${buildNumber} 中发现 ${errors.size()} 处 error errors.each { echo it } } } }⚠️ 需要 Jenkins 管理员权限且要在 In-process Script Approval 中批准相关方法。方案五Shell 脚本直接分析 Jenkins 日志目录bash#!/bin/bash JENKINS_HOME/var/jenkins_home JOB_NAMEyour-job-name BUILD_NUMBERlastBuild # 或具体数字如 123 LOG_FILE${JENKINS_HOME}/jobs/${JOB_NAME}/builds/${BUILD_NUMBER}/log echo 分析日志文件: ${LOG_FILE} # 找出包含 error 的行显示前后2行上下文 grep -i -C 2 error ${LOG_FILE} # 统计数量 ERROR_COUNT$(grep -ic error ${LOG_FILE}) echo Error 出现次数: ${ERROR_COUNT} # 如果大于0则退出码为1 if [ ${ERROR_COUNT} -gt 0 ]; then echo ❌ 发现错误 exit 1 else echo ✅ 未发现错误 exit 0 fi快速选择指南表格场景推荐方案当前构建中实时检查方案三Pipeline 中捕获并分析分析已完成的构建方案一Pipeline或 方案五Shell外部系统监控 Jenkins方案二Jenkins API需要分析历史构建方案四需要管理员权限你的具体需求是哪种是在Pipeline 执行过程中实时检查还是构建完成后去分析日志文件需要我提供一个完整的、可直接使用的 Pipeline 脚本吗#!/bin/bash JENKINS_HOME/var/jenkins_home JOB_NAME${1:-dev-mall} # 如果 $1 为空则使用默认值 dev-mall BUILD_NUMBERlastBuild # 或具体数字如 123 LOG_FILE${JENKINS_HOME}/jobs/${JOB_NAME}/builds/${BUILD_NUMBER}/log echo 分析日志文件: ${LOG_FILE} # 找出包含 error 的行显示前后2行上下文 grep -i -C 2 error ${LOG_FILE} # 统计数量 ERROR_COUNT$(grep -ic error ${LOG_FILE}) echo Error 出现次数: ${ERROR_COUNT} # 如果大于0则退出码为1 if [ ${ERROR_COUNT} -gt 0 ]; then echo ❌ 发现错误 exit 1 else echo ✅ 未发现错误 exit 0 fi