900 字
约 3 分钟
10
S15-A02 · 容器化部署与 CI/CD

适用读者:要把"手动上线"变成"可回滚的流水线"的人。
前置:S15-J05、S14-A01。
覆盖旧文:400(CI/CD 入门,733 点)。
覆盖扩展:E-S15-009(流水线四阶段)、E-S15-018(回滚三要素)。
上一篇:S15-A01 · Nginx:反向代理、gzip 与 TLS
下一篇:S15-A03 · 多平台安装与中间件编排。


1. 一句话结论

CI/CD 的价值不在"自动",在"每次变更都可重复、可验证、可回滚"。四阶段:构建 → 测试 → 制品 → 部署。

阶段 产出 关键要求
CI(构建) 镜像/包 可重复(S06-A02 的四要素)
测试 报告 失败即停
制品 带版本号/摘要 不可变
CD(部署) 运行实例 可回滚

2. 为什么"制品不可变"是核心(E-S15-018)

反例 后果
每次部署都重新构建 同一 commit 可能产出不同结果
用 latest 标签 无法知道线上是哪版
直接在生产机上改文件 无法回滚、无审计

正确做法:

构建一次 → 打上 commit hash 标签 → 同镜像在测试/生产都用它 → 回滚=切标签

判据:"线上跑的是哪个 commit?" 答不上来 → 制品治理有问题。


3. 四阶段流水线(E-S15-009)

# 伪代码(GitHub Actions / GitLab CI 同构)
build:   docker build -t app:${GIT_SHA} .
test:    docker run app:${GIT_SHA} npm test
publish: docker push app:${GIT_SHA}
deploy:  kubectl set image / docker compose up -d  (按环境)
阶段 失败怎么办
构建 直接失败(不产出)
测试 阻断(不许发布)
发布制品 重试
部署 自动回滚到上一个标签

4. 回滚三要素

要素 说明
旧制品存在 镜像保留 N 个版本
切换是原子的 容器/负载均衡切标签
数据兼容 迁移脚本要向后兼容(S11-A02)

"数据库是最难回滚的"——所以先做兼容性变更(加列),再改代码,最后删旧列(expand-contract)。


5. 观测:部署完怎么判断成功

指标 阈值
错误率 恢复基线
延迟 P99 不高于部署前
健康检查 /healthz 200
日志 无新异常

判据:"部署成功"由指标判定,不是由"命令返回 0"判定。


6. 五个误区

误区 真相
"流水线就是跑个脚本" 关键是制品与回滚
"用 latest 更省事" 无法追踪版本
"回滚就是 git revert" 要回滚制品,不是源码
"数据库也能一键回滚" 需 expand-contract
"部署成功=服务正常" 要看指标

7. 自检(架构师版)

  1. 四阶段各产出什么?
  2. 为什么"制品不可变"是核心?
  3. 回滚三要素?
  4. 数据库为什么最难回滚?怎么缓解?
  5. "部署成功"怎么判定?

8. 下一篇

S15-A03 · 多平台安装与中间件编排

流水线讲完,最后一篇:同一套 compose 怎么在开发/生产复用(含 WSL2 与中间件安装)。


本篇属于系列《S15 · Linux 与运维》。旧文来源:A-400;扩展点 E-S15-009/018。

S15-A02 · 容器化部署与 CI/CD
https://www.clxhxhhr.top/posts/5402/
作者
clxstart
发布于
2024-12-31
许可协议
CC BY-NC-SA 4.0
评论
0 条
还没有评论,先写一条吧。