如何把 Trivy 接入 CircleCI 构建流水线扫描本地镜像
【免费下载链接】trivyFind vulnerabilities, misconfigurations, secrets, SBOM in containers, Kubernetes, code repositories, clouds and more项目地址: https://gitcode.com/GitHub_Trending/tr/trivy
如果你的 CI 跑在 CircleCI 上,并且每次构建都会产出一个本地 Docker 镜像,你可以把 Trivy 装进 CI 执行器(job executor)中,在docker build之后直接对本地镜像跑trivy image扫描,把漏洞检查变成构建流水线的一个固定步骤。Trivy 官方文档提供了一个完整的 CircleCI 配置示例(见 docs/tutorials/integrations/circleci.md),下面按这个示例还原接入过程。
准备条件
文档中的示例配置隐含了以下前提:
- 项目已托管在 CircleCI,流水线配置文件为
.circleci/config.yml; - 仓库根目录存在
Dockerfile,因为示例用docker build -t trivy-ci-test:${CIRCLE_SHA1} .在仓库根目录构建镜像; - 执行 job 的执行器镜像自带 Docker 客户端,示例使用的是
docker:stable-git; - 安装步骤用
apk add --update-cache --upgrade curl获取 curl,这是 Alpine 风格的包管理命令;如果你的执行器基于其他发行版,需要换成对应的安装方式。
配置流水线
把示例配置写入.circleci/config.yml。整个 job 的顺序是:检出代码 → 设置远程 Docker 环境 → 构建镜像 → 安装 Trivy → 用 Trivy 扫描刚才构建的本地镜像。
jobs: build: docker: - image: docker:stable-git steps: - checkout - setup_remote_docker - run: name: Build image command: docker build -t trivy-ci-test:${CIRCLE_SHA1} . - run: name: Install trivy command: | apk add --update-cache --upgrade curl curl -sfL https://raw.githubusercontent.com/aquasecurity/trivy/main/contrib/install.sh | sh -s -- -b /usr/local/bin - run: name: Scan the local image with trivy command: trivy image --exit-code 0 --no-progress trivy-ci-test:${CIRCLE_SHA1} workflows: version: 2 release: jobs: - build各步骤的作用:
- checkout + setup_remote_docker:检出代码并准备 Docker 运行环境,使后续的
docker build可用。 - Build image:把当前目录构建为镜像,标签是
trivy-ci-test:${CIRCLE_SHA1}。 - Install trivy:先安装 curl,再执行 Trivy 的官方安装脚本(contrib/install.sh)。
-b /usr/local/bin表示把二进制装到/usr/local/bin;不指定 tag 时脚本安装最新版本。这一步只在 CI 的 job 容器内下载并安装二进制,影响范围是这次构建,不会改到你的主机环境。 - Scan the local image with trivy:对第 2 步构建的同一个镜像名执行
trivy image扫描。构建和扫描必须使用完全一致的镜像名,否则扫描的不是刚构建出来的本地镜像。
如果你想用自己的镜像名和 tag,只要保证docker build -t和trivy image两处保持一致即可。
扫描命令参数说明
扫描命令中用到的两个参数(完整参数见 trivy image 参考):
--exit-code int:specify exit code when any security issues are found,即发现安全问题时命令返回的退出码。退出码决定 CI 这一步是否算失败;--no-progress:suppress progress bar,关闭进度条输出,让日志更干净。
验证接入是否生效
- 验证 Trivy 已装好:Trivy 安装文档给出的验证方式是执行
trivy --version确认命令可用(见 docs/getting-started/installation.md)。可以在 job 里临时加一个run: trivy --version步骤确认。 - 验证扫描结果:扫描步骤在 job 日志中输出报告。构建是否通过取决于退出码,文档的说明是:在 CI 中扫描镜像并在发现漏洞时让 workflow 失败,若不想让构建失败则指定
--exit-code 0(见 docs/tutorials/integrations/index.md)。上面的示例配置用的正是--exit-code 0,所以即使扫出漏洞,这一步也会以 0 退出、构建不失败,报告只体现在日志里。 - 想让漏洞阻断构建时:文档中的 Woodpecker 示例展示了非零退出码的用法——
trivy fs --exit-code 1 ...,并注释说明退出码为 0 时视为通过、否则视为失败。把扫描步骤改成--exit-code 1后,发现安全问题时 job 会以 1 退出,流水线随之失败。
限制与可选分支
- 示例中的安装步骤依赖
apk,换执行器基础镜像时要自行调整 curl 的安装命令; - 漏洞扫描依赖 Trivy 漏洞数据库,
trivy image首次运行会按默认行为更新数据库,CI 执行器需要能访问相关下载源,否则扫描步骤会因下载失败而报错; - CircleCI 生态中还有一个社区维护的 Trivy Orb 可用(见 docs/ecosystem/cicd.md),如果不想手写 job 步骤,可以了解该 Orb;本文主路径仍以官方教程中的原生
config.yml示例为准。
【免费下载链接】trivyFind vulnerabilities, misconfigurations, secrets, SBOM in containers, Kubernetes, code repositories, clouds and more项目地址: https://gitcode.com/GitHub_Trending/tr/trivy
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考