DevOps 心智模型:变更、制品、环境与反馈

一句话模型

DevOps 是把每次变更变成一条可重复、可验证、可回滚的流水线,并用反馈回路持续缩短交付时间。

核心概念

1. 变更流水线

任何改动都应该沿同一条路径流动:版本控制 → 自动检查 → 构建 → 制品 → 部署 → 验证。流水线把人的操作变成有版本、有日志、可重放的步骤,减少“只有某个人会发布”的隐性知识。小批量变更更容易定位失败,也更容易回滚。手工操作不是绝对禁止,但必须是例外,并留下审计记录。

2. 构建一次,晋升多次

制品只在一次构建中产生,之后用同一个 digest 依次进入测试、预发和生产环境。每个环境重新构建会引入不同的依赖、基础镜像和缓存,导致测过的不是上线的。环境差异通过配置、密钥和部署参数注入,而不是重新编译。晋升过程最好有准入检查和审批记录,保证“通过测试的制品”就是“被发布的制品”。

3. 不可变制品

容器镜像、二进制包和配置包一旦发布就不应原地修改,标签可以覆盖,digest 不会变。发布、回滚和审计都应该引用 digest,而不是 latest。不可变制品配合 SBOM、签名和 provenance,才能回答“运行的是什么、从哪来、谁构建的”。修复漏洞要重新构建并生成新 digest,而不是进入容器里打补丁。

4. 环境即代码

基础设施、网络、权限、监控和策略都用声明式代码描述,存放在 Git 中,经过评审和自动化执行。IaC 的价值在于可重复创建、可审查、可回滚和漂移检测,而不是把点击操作换成脚本。状态文件、密钥和云凭据是重点保护对象;生产变更应先 plan 或 dry-run,确认影响范围再执行。

5. 反馈回路

交付速度和质量需要被测量:部署频率、变更前置时间、变更失败率和恢复时间。运行侧需要指标、日志、追踪和 SLO,把用户影响转化为可行动的告警。反馈回路不仅是监控看板,还包括 CI 时长、测试稳定性、故障复盘和开发者体验。没有反馈的流水线只是在自动化地制造未知。

6. 供应链

供应链覆盖源码、依赖、构建、制品、仓库和部署。每个环节都可能被篡改或引入漏洞,因此需要依赖锁定、最小权限的 CI、SBOM、签名、provenance 和准入策略。供应链安全的目标不是“没有漏洞”,而是任何制品都能被验证来源、追溯构建过程,并在发现问题时快速定位影响范围。

概念关系

阶段 核心产出 可验证证据
源码与评审 提交、变更记录 提交 SHA、评审记录
持续集成 测试结果、构建 流水线日志、测试报告
构建与打包 镜像、二进制 digest、SBOM
签名与来源 信任链 签名、provenance
部署与晋升 运行中的版本 部署记录、GitOps 状态
运行与反馈 指标、日志、追踪 SLO、告警、复盘

流水线的每一段都应留下不可篡改的证据,下一段只接受通过验证的输入。这样发布才能从“相信某个人”变成“验证某个制品”。

常见误解

读完自测

合上页面,先回答,再展开对照。

  1. 为什么要求“构建一次,晋升多次”?在每个环境重新构建有什么风险?
  2. 不可变制品和可变标签的区别是什么?回滚应该引用哪一个?
  3. 供应链中的签名、SBOM 和 provenance 分别证明什么?
答案
  1. 重新构建会使用不同的基础镜像、依赖解析结果和缓存,测试通过的制品不一定等于生产运行的制品。构建一次并用 digest 晋升,能保证测试对象就是发布对象,回滚也只是切换回上一个 digest。
  2. 标签可以被覆盖,同一个标签在不同时间可能指向不同镜像;digest 由内容计算,内容不变 digest 就不变。发布和回滚都应引用 digest,标签只作为人类可读的别名。
  3. SBOM 证明制品包含哪些组件和版本;签名证明制品由可信主体签署且未被篡改;provenance 证明它由哪个仓库、提交、流水线和步骤构建。三者结合才能建立从源码到运行的信任链。

相关条目