GitLab自定义依赖扫描报告上传成功却未在安全仪表板显示问题排查
报告未在安全仪表板展示的排查与修复项
问题集中在报告格式、CI配置、展示规则三类,按影响优先级排序:
- JSON报告存在语法错误,直接导致GitLab解析失败
你提供的报告内容有两处违反标准JSON规范的问题,会让解析器直接丢弃整个文件:remediations数组下的fixes对象中,id属性末尾带多余尾逗号,严格JSON语法不允许对象/数组最后一个元素后加这类多余分隔符,问题代码段:"fixes": [ { "id": "5d681b13-e8fa-4668-957e-8d88f932ddc7", } ]remediations数组对象中,diff属性值后面加了JavaScript风格的单行注释// some content is omitted for brevity,标准JSON不支持任何形式的注释,解析器读到该段内容会直接终止解析。
哪怕制品上传接口返回201成功状态,只要JSON解析失败,报告就不会同步到安全仪表板。修复时删除上述两处非法内容,先通过本地JSON校验工具确认文件合法,再重新上传。
- CI作业配置存在触发报告收集失败的逻辑
作业配置了allow_failure: true,这类作业如果因脚本非零退出被标记为可接受的失败状态,GitLab默认会跳过收集该作业产生的安全类制品报告。同时当前脚本的curl命令未加失败校验参数:如果webhook请求返回非2xx状态码,curl会直接以非0值退出,加上允许失败的配置,作业最终状态会被标记为失败,关联的报告自然无法进入安全扫描收集链路。
对应调整:- curl命令增加
-f参数,强制在请求返回非2xx状态码时直接抛出错误,即curl -f https://webhook.site/XXXX -o gl-dependency-scanning-report.json - 移除无意义的
sleep 3等待逻辑,减少不必要的执行时长消耗
- curl命令增加
- 安全仪表板展示前置条件未满足
依赖扫描报告要在项目级安全仪表板展示,需符合两个基础规则:- 生成报告的流水线关联分支为项目默认分支(通常为main/master),特性分支的扫描报告只会展示在对应分支的安全详情页,不会同步到项目级仪表板
- 实例的依赖扫描功能权限正常开启,自定义上传的依赖扫描报告不需要额外高版本授权,只要能正常提交制品即可被识别
注意:修复上述问题后需重新触发流水线,待作业执行完成后刷新安全仪表板即可查看扫描结果。
内容的提问来源于stack exchange,提问作者Alik Ko
相关产品推荐
相关产品推荐

