如何使用Groovy提取指定时间范围内的Jenkins构建日志
Jenkins日志按时间范围筛选实现方案
原时间转换代码失败原因
- 格式字符串与Jenkins日志的时间结构不匹配:
示例日志时间2021-12-01T09:19:54-07:00的结构为年-月-日T时:分:秒时区偏移,但你的格式串错误将秒的占位符ss放在了时区符号-之后,还错误将时区部分写死为:00,导致解析失败。 - 类型转换错误:
Date.parse()返回的是Date类型,你直接赋值给String类型变量会抛出类型不匹配异常。 - 旧版
Date.parse()方法在不同Groovy版本中兼容性较差,更推荐使用SimpleDateFormat或Java 8+的java.time类库做时间解析。
正确时间转换测试代码
import java.text.SimpleDateFormat import java.util.Date String log_time = "2021-12-01T09:19:54-07:00" // 匹配ISO 8601带时区偏移的标准格式 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssXXX") Date logDate = sdf.parse(log_time) println(logDate)
完整时间范围筛选脚本
import java.text.SimpleDateFormat import java.util.Date import jenkins.model.Jenkins import hudson.model.Job // 可修改的配置项 def JOBNAME = 'My_Jenkins_job' def BUILDID = '34' // 定义筛选的起止时间,格式与日志时间格式保持一致即可 def START_TIME_STR = "2021-11-30T08:23:00-07:00" def END_TIME_STR = "2021-11-30T08:25:59-07:00" // 时间格式模板,和Jenkins日志前缀的时间格式完全匹配 def TIME_PATTERN = "yyyy-MM-dd'T'HH:mm:ssXXX" // 日志时间前缀的字符长度,按需调整,避免全量正则匹配提升性能 def TIME_PREFIX_LENGTH = 25 SimpleDateFormat sdf = new SimpleDateFormat(TIME_PATTERN) Date startTime = sdf.parse(START_TIME_STR) Date endTime = sdf.parse(END_TIME_STR) // 遍历匹配任务和构建 Jenkins.instance.getAllItems(Job.class).each { job -> if (job.name == JOBNAME) { job.builds.each { build -> if (build.id == BUILDID) { def matchedLines = [] build.logFile.readLines().each { line -> try { // 提取行首的时间部分转换为日期对象 String timeStr = line.take(TIME_PREFIX_LENGTH) Date lineTime = sdf.parse(timeStr) // 时间范围判断 if (lineTime >= startTime && lineTime <= endTime) { matchedLines.add(line) } } catch (Exception e) { // 跳过无时间前缀的异常行,比如空行、非结构化输出行 return } } // 输出筛选结果 println '=' * 60 println "Log summary between ${START_TIME_STR} and ${END_TIME_STR}" println '=' * 60 matchedLines.each { println it } } } } }
注意事项
- 如果你的Jenkins日志时间前缀没有时区、或者格式不同,只需对应调整
TIME_PATTERN和TIME_PREFIX_LENGTH即可。比如时间格式为2021-11-30 08:23:00,就把TIME_PATTERN改为yyyy-MM-dd HH:mm:ss - 比原字符串匹配方案灵活性更高,支持跨小时、跨天的时间范围筛选,不需要拼接多个前缀字符串
- 异常捕获逻辑可以避免无时间前缀的日志行导致脚本意外终止
内容的提问来源于stack exchange,提问作者Samselvaprabu
相关产品推荐
相关产品推荐

