结论:CI(持续集成)覆盖代码提交到制品产出的自动化验证,CD(持续交付/部署)负责把制品安全地推向各环境,一条完整流水线通常是:代码 → 构建 → 测试 → 质量扫描 → 制品打包 → 部署 → 验证。

展开:各阶段要点:1)触发:push/MR 触发 CI,tag 或人工审批触发 CD;2)构建:编译打包,利用缓存(依赖缓存、Docker layer 缓存)控制时长;3)测试分层:单元测试必跑且快速,接口/集成测试随后,E2E 放后置环境,遵循测试金字塔;4)质量门禁:静态扫描(SonarQube)、依赖漏洞扫描(SCA)、镜像扫描(Trivy)、覆盖率阈值,不达标即失败;5)制品管理:镜像打不可变 tag(git SHA 而非 latest)推入镜像仓库,制品不可变、一次构建多处部署是核心原则;6)部署:dev/staging 自动,生产加审批门禁,配合滚动/金丝雀策略;7)验证:部署后自动冒烟测试,失败自动回滚。实践要点:流水线要快(CI 控制在 10 分钟内)、失败要早(快的检查放前面)、一切配置即代码(Jenkinsfile/GitHub Actions YAML 入库版本化)。易错点:latest tag 导致无法追溯和回滚;流水线里硬编码密钥(应走 Secret 管理);CI 和 CD 环境不一致导致「在我机器上是好的」。