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
练习#
- 设计一份变更单模板,包含风险等级与回滚步骤。
- 通过
git tag与sha256sum生成可追溯制品。 - 在两台测试机执行灰度发布并验证健康接口。
- 人为制造启动失败(如占用端口),用
journalctl定位原因并恢复。