如何把 Trivy 接入 CircleCI 构建流水线扫描本地镜像
2026/9/12 16:04:08 网站建设 项目流程

如何把 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

各步骤的作用:

  1. checkout + setup_remote_docker:检出代码并准备 Docker 运行环境,使后续的docker build可用。
  2. Build image:把当前目录构建为镜像,标签是trivy-ci-test:${CIRCLE_SHA1}
  3. Install trivy:先安装 curl,再执行 Trivy 的官方安装脚本(contrib/install.sh)。-b /usr/local/bin表示把二进制装到/usr/local/bin;不指定 tag 时脚本安装最新版本。这一步只在 CI 的 job 容器内下载并安装二进制,影响范围是这次构建,不会改到你的主机环境。
  4. Scan the local image with trivy:对第 2 步构建的同一个镜像名执行trivy image扫描。构建和扫描必须使用完全一致的镜像名,否则扫描的不是刚构建出来的本地镜像。

如果你想用自己的镜像名和 tag,只要保证docker build -ttrivy image两处保持一致即可。

扫描命令参数说明

扫描命令中用到的两个参数(完整参数见 trivy image 参考):

  • --exit-code int:specify exit code when any security issues are found,即发现安全问题时命令返回的退出码。退出码决定 CI 这一步是否算失败;
  • --no-progress:suppress progress bar,关闭进度条输出,让日志更干净。

验证接入是否生效

  1. 验证 Trivy 已装好:Trivy 安装文档给出的验证方式是执行trivy --version确认命令可用(见 docs/getting-started/installation.md)。可以在 job 里临时加一个run: trivy --version步骤确认。
  2. 验证扫描结果:扫描步骤在 job 日志中输出报告。构建是否通过取决于退出码,文档的说明是:在 CI 中扫描镜像并在发现漏洞时让 workflow 失败,若不想让构建失败则指定--exit-code 0(见 docs/tutorials/integrations/index.md)。上面的示例配置用的正是--exit-code 0,所以即使扫出漏洞,这一步也会以 0 退出、构建不失败,报告只体现在日志里。
  3. 想让漏洞阻断构建时:文档中的 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),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询