调用Jenkins consoleText接口返回HttpStatus 100无内容该如何处理?
Jenkins consoleText接口偶发返回100状态码的解决方案
问题根因定位
首先明确两个核心前提:
- HTTP 100 Continue是协商类状态码,不是最终响应,只有客户端请求头携带
Expect: 100-continue时才会触发服务端返回该状态 - 你当前使用的带
#的路径是Jenkins前端单页应用的路由路径,#后的哈希片段不会发送到后端服务,路由匹配异常会触发非预期的状态返回
修复步骤
- 第一步:修正请求路径,使用后端可识别的标准API路径
不要使用带#的前端路径,替换为对应构建号的正式日志接口,示例:
拉取最近一次构建的日志:http://jenkins.domain.com/job/my_job_name/lastBuild/consoleText
拉取指定构建ID的日志:http://jenkins.domain.com/job/my_job_name/{构建ID}/consoleText - 第二步:移除请求头中的
Expect字段
检查你的HTTP客户端配置,主动删除Expect: 100-continue请求头,避免触发100状态码协商逻辑 - 第三步:开启HTTP客户端的100 Continue自动处理能力
大部分主流HTTP客户端(Python requests、Java OkHttp等)默认支持自动处理100 Continue响应,收到后会继续等待最终的200响应。如果你的自定义HTTP客户端没有开启该能力,需要调整配置,不要将100作为最终响应处理,保持连接等待后续返回的日志内容 - 第四步:增加构建状态校验逻辑
拉取日志前先调用构建信息接口确认构建已完成落库,接口示例:http://jenkins.domain.com/job/my_job_name/{构建ID}/api/json,校验返回值中building字段为false、result字段已赋值(SUCCESS/FAILURE/ABORTED)后再发起日志获取请求 - 第五步:使用更稳定的增量日志接口作为替代
如果仍有异常,切换为Jenkins官方提供的程序专用日志接口logText/progressiveText,该接口专门针对自动化调用场景优化,支持大日志分片拉取,示例:
全量拉取日志:http://jenkins.domain.com/job/my_job_name/{构建ID}/logText/progressiveText?start=0
内容的提问来源于stack exchange,提问作者MBaas
相关产品推荐
相关产品推荐

