Software Engineer · 语言与工程基础

CI/CD:可复现产物、发布门禁与回滚

从一次提交解释构建、测试、产物、环境与发布,回答实践追问。

题目重点:从一次提交解释构建、测试、产物、环境与发布,回答实践追问。

题意与假设

这道练习题保留了面经中值得训练的核心约束,并将需要澄清的条件单独列出。现场拿到变体时,先和面试官确认这些条件。

  • 讨论通用流水线,不假定特定云或工具。实践叙述使用真实项目证据。

解题路线

  1. CI 检查提交能否构建并通过必要验证;CD 把同一个已验证产物送往目标环境。构建一次、记录版本和依赖,比每个环境重新拼装更容易审计。
  2. 门禁按风险设置:静态检查、单元、协议/迁移集成、安全和预览。不可让全套慢测试掩盖快速反馈,也不为了速度跳过关键数据迁移。
  3. 部署分离代码、配置与秘密;权限最小化,日志不泄露凭证,环境差异通过配置合同与冒烟验证发现。
  4. 灰度逐步扩大流量,看业务失败率和尾延迟,设停止阈值。回滚二进制不保证回滚数据库,向后兼容迁移与 feature flag 需要提前设计。

手动走一遍

schema 先加可空新列,旧应用仍能运行;新应用双读/迁移后,再在后续版本收紧约束。发布失败时用产物 ID 回退,核对错误率恢复,保留失败证据,而非只说按钮显示成功。

规模与取舍

吞吐受最长门禁、资源并发和排队影响。报告提交到反馈、部署频率、失败率与恢复时间,避免只追求次数。

易错点与追问

容易失分的边界

  • 每次发布重新构建不同字节。
  • 回滚忽略数据兼容。
  • 只描述工具名没有质量门禁。

继续深挖

  • 如何签名与追踪产物?
  • 灰度如何防止样本过少得出错误结论?
✓已复制微信号!