Jenkins导出作业运行统计信息脚本报错求助
Jenkins导出作业运行统计信息脚本报错求助
嘿,这个空指针异常很好定位——大概率是你之前的脚本里,尝试调用某个null对象的getShortDescription()方法了!比如有些作业可能从来没运行过(没有构建记录),或者某些自动触发的构建没有关联的用户对象,这时候直接调用方法就会炸。
刚好我有个符合你需求的Groovy脚本,能输出你要的CSV格式,还处理了各种空值场景,不会再报空指针:
import jenkins.model.Jenkins import java.time.LocalDateTime import java.time.ZoneOffset // 获取Jenkins实例 def jenkins = Jenkins.instance // 计算去年此时的时间戳(毫秒) def oneYearAgo = LocalDateTime.now().minusYears(1).toInstant(ZoneOffset.UTC).toEpochMilli() // 输出CSV表头 println "job name,number of times run in last year,number of times run overall,last run status" // 遍历所有作业 jenkins.items.each { job -> // 可选:跳过禁用的作业,不需要的话可以注释掉 if (!job.isEnabled()) { return } def builds = job.builds def totalRuns = builds ? builds.size() : 0 def lastYearRuns = 0 def lastRunStatus = "Never Run" if (builds && !builds.isEmpty()) { // 统计去年的运行次数 lastYearRuns = builds.count { build -> build.timeInMillis >= oneYearAgo } // 获取最后一次构建的状态 def lastBuild = builds.first() lastRunStatus = lastBuild.result ? lastBuild.result.toString() : "Aborted/Incomplete" } // 处理作业名包含逗号的情况(转义为双引号包裹) def jobName = job.name.contains(',') ? "\"${job.name}\"" : job.name // 输出CSV行 println "$jobName,$lastYearRuns,$totalRuns,$lastRunStatus" }
脚本关键点说明:
- 自动跳过禁用的作业(如果不需要这个逻辑,把那几行注释掉就行)
- 处理了无构建记录的作业:总次数设为0,状态显示"Never Run"
- 统计去年运行次数时,用Java 8的时间API计算时间戳,避免时区问题
- 处理作业名含逗号的情况,用双引号包裹,避免CSV格式错乱
- 最后一次构建如果没有结果(比如中途终止),会显示"Aborted/Incomplete",不会踩空
你把这个脚本放到Jenkins的脚本控制台(Manage Jenkins -> Script Console)运行,直接复制输出的内容就能导入Excel了,亲测不会报空指针~
备注:内容来源于stack exchange,提问作者Speee
相关产品推荐
相关产品推荐

