在持续集成阶段阻断高危缺陷镜像,需将安全扫描设为不可跳过的硬门槛,嵌入构建完成但未推送前的精确节点,通过非零退出码强制中断流水线,并用.trivyignore结构化管理豁免、以扫描结果为修复闭环依据。

在持续集成阶段阻断高危缺陷镜像,核心是把安全扫描变成“硬门槛”——不是可选动作,而是构建流水线中不可跳过的验证步骤。关键不在装插件,而在让扫描结果直接决定流水线成败。
把扫描嵌入构建完成、推送前的精确节点
扫描必须发生在镜像已构建完成、但尚未推送到远程仓库的瞬间。早了,镜像不存在;晚了,漏洞镜像已入库,阻断失去意义。
- GitHub Actions:在
docker build步骤后立即执行trivy image my-app:latest - GitLab CI:新增独立 stage(如
security-scan),用aquasec/trivy镜像运行扫描 - Jenkins Pipeline:在
sh 'docker build -t ...'后紧跟sh 'trivy image ...'
用退出码强制中断流水线
扫描发现漏洞却不失败,等于没做。必须让工具在命中高危问题时返回非零退出码,触发 CI 中断。
- 指定关注级别:
--severity CRITICAL,HIGH - 启用阻断机制:
--exit-code 1(默认为0,需显式设置) - 避免误报干扰:
--ignore-unfixed(跳过暂无修复方案的漏洞) - 完整命令示例:
trivy image --severity CRITICAL,HIGH --exit-code 1 --ignore-unfixed my-app:latest
管理豁免项,兼顾安全与交付节奏
完全不允许任何豁免,容易导致误报拖慢开发。对确认无风险的漏洞,应结构化管理豁免,而非绕过扫描。
- 项目根目录创建
.trivyignore文件,每行一个 CVE ID - 每条忽略项附简短注释,说明原因和复核时间,例如:
CVE-2023-12345 # 容器内无对应攻击面,2026-Q3复核 - CI 中通过
--ignore-file .trivyignore参数启用该文件
验证修复闭环,以扫描结果为准
修复不能凭感觉或经验判断。必须重新构建、重新扫描,并确认输出中 CRITICAL/HIGH 条目为 0,才允许进入后续流程。
- 常见修复方式:升级基础镜像(如
debian:11 → debian:12-slim)、显式更新包(如apt-get install -y openssl=1.1.1n) - 每次修复后,运行与阻断阶段完全相同的 Trivy 命令
- 只有当输出末尾显示
Total: 0(且无 CRITICAL/HIGH 行)时,才算真正通过











