19.7.1 发布流程体系与阶段划分

1. 发布流程体系与阶段划分#

发布流程体系将变更风险前移并标准化交付,覆盖从需求到验收的全生命周期,明确阶段目标、输入输出、责任与质量门禁,确保可追溯与可回滚。

发布流程原理草图(阶段与门禁)

文章图片

阶段划分与关键交付物
- 阶段0:需求与变更申请 —— 变更单、风险等级、影响范围、回滚方案草案
- 阶段1:研发与构建 —— 代码、构建产物、版本号/提交哈希、制品库入库
- 阶段2:测试与验证 —— 测试报告、缺陷清单、准入结论
- 阶段3:预发布与演练 —— 配置一致性验证、演练记录、回滚验证
- 阶段4:正式发布 —— 发布记录、灰度/分批策略、监控指标
- 阶段5:验收与关闭 —— 验收报告、变更单闭环、复盘与改进

变更单模板示例(关键字段)

change_id: CHG-2024-001
title: "用户服务新增缓存"
risk_level: Medium
impact_scope: "用户服务API/缓存层"
window: "2024-05-10 22:00-23:00"
rollback: "回滚至v1.4.2,清理新缓存key"
approve: ["研发负责人","运维负责人","业务负责人"]

示例发布流程(含命令与解释)#

场景:将应用发布到两台生产机,先灰度一台,再全量。

1)打标签与生成可追溯版本

# 查看当前提交
git log -1 --oneline
# 为本次发布打标签
git tag -a v1.4.3 -m "release v1.4.3"
# 推送标签到远端
git push origin v1.4.3
  • git tag -a:生成带注释的版本标签,便于回溯
  • git push origin v1.4.3:将版本发布到远端仓库

2)构建制品并校验

# 构建制品
./gradlew clean build
# 计算制品哈希用于可追溯
sha256sum build/libs/app.jar > build/libs/app.jar.sha256
  • sha256sum:生成哈希用于制品一致性校验

3)上传制品到制品库(示例:用 scp)

# 上传到制品库目录
scp build/libs/app.jar* repo@artifact:/data/artifacts/app/v1.4.3/

4)预发布演练(灰度机)

# 仅发布到灰度机
rsync -avz /data/artifacts/app/v1.4.3/app.jar app@10.0.0.11:/opt/app/app.jar
ssh app@10.0.0.11 "systemctl restart app && systemctl status app --no-pager"
  • rsync -avz:增量同步制品
  • systemctl restart:重启服务验证启动

5)正式发布(分批)

# 批量发布(第二台)
rsync -avz /data/artifacts/app/v1.4.3/app.jar app@10.0.0.12:/opt/app/app.jar
ssh app@10.0.0.12 "systemctl restart app && systemctl status app --no-pager"

6)健康检查与验收

# 业务接口检查
curl -s http://10.0.0.11:8080/health && echo
curl -s http://10.0.0.12:8080/health && echo
  • 预期输出:OK 或健康 JSON

工具安装示例(发布主机)#

# CentOS
sudo yum install -y git rsync curl jq
# Ubuntu
sudo apt-get update && sudo apt-get install -y git rsync curl jq
  • git:版本与标签管理
  • rsync:高效制品同步
  • curl:接口健康检查

排错清单与定位命令#

1)服务启动失败

# 查看服务日志
journalctl -u app -n 200 --no-pager
# 查看端口占用
ss -lntp | grep 8080

2)制品与版本不一致

# 本地与远端哈希对比
sha256sum /opt/app/app.jar
cat /data/artifacts/app/v1.4.3/app.jar.sha256

3)灰度流量未生效

# 检查负载均衡权重(示例 Nginx upstream)
grep -n "upstream" -n /etc/nginx/conf.d/app.conf
nginx -t && systemctl reload nginx

练习#

  1. 设计一份变更单模板,包含风险等级与回滚步骤。
  2. 通过 git tagsha256sum 生成可追溯制品。
  3. 在两台测试机执行灰度发布并验证健康接口。
  4. 人为制造启动失败(如占用端口),用 journalctl 定位原因并恢复。