Groovy提取Jenkins控制台失败率 超50%置任务失败实现方法
实现方案
Groovy 实现(适配Jenkins脚本控制台、流水线全局库场景)
核心逻辑是通过正则从已匹配到的目标行中提取括号内的百分比数值,转成整数后做阈值判断,超过阈值直接中断构建标记失败。
完整代码如下:
// 筛选包含"%)"的目标行 def matchedLines = fileContents.findAll { it.contains('%)') } if (!matchedLines) { throw new RuntimeException("未匹配到包含失败率的输出行") } println "匹配到的统计行:${matchedLines[0]}" // 正则提取(xx%)格式中的数字部分 def rateMatcher = (matchedLines[0] =~ /\((\d+)%\)/) if (!rateMatcher.find()) { throw new RuntimeException("无法从统计行中解析出有效失败率") } int failRate = rateMatcher.group(1) as int println "解析得到测试失败率:${failRate}%" // 阈值校验,失败率高于50%则将任务置为失败 if (failRate > 50) { // 流水线场景也可替换为 currentBuild.result = 'FAILURE' 后return throw new RuntimeException("测试失败率${failRate}%超过阈值50%,构建失败") }
如果是在Jenkins流水线中使用,除了抛异常的方式,也可以通过currentBuild.result = 'FAILURE'设置构建状态,抛异常的优势是会直接中断后续构建步骤,避免无效执行。
非Groovy实现方案(Shell后置脚本)
如果不想维护Groovy代码,可以在执行测试的构建步骤后增加一段Shell脚本,直接从输出日志中提取失败率做判断,脚本返回非0退出码时Jenkins会自动将任务标记为失败:
# 替换为实际测试输出日志的路径,流水线中可直接读取$WORKSPACE下的输出文件 fail_rate=$(grep '%)' your_test_output.log | grep -oP '\(\K\d+(?=%\))' | head -n 1) echo "当前测试失败率:${fail_rate}%" if [ -z "$fail_rate" ]; then echo "未解析到有效失败率,构建异常" exit 1 fi if [ "$fail_rate" -gt 50 ]; then echo "失败率超过50%阈值,构建失败" exit 1 fi
这种方案不需要额外安装插件,适配绝大多数自由风格项目、流水线项目的Shell执行节点。
内容的提问来源于stack exchange,提问作者Arul
相关产品推荐
相关产品推荐

