我们团队的后端部署原来是一套纯手动流程,跑一次至少 15 分钟,而且全程要盯着、容易出错。后来我写了个自动化工具把它压到 5 分钟、人工只剩一步。这篇记录一下当时的痛点和具体做法。
传统部署流程的痛点
在开发自动化部署工具之前,我们的部署流程需要频繁的人工介入和等待。让我们看看一个典型的部署过程:
1. 评审与合并阶段
开发人员提交代码后,首先要在代码平台等待其他同学评审并给出 +2。这个过程完全依赖人工,评审人可能正在开会或者忙于其他事情,导致评审时间不可控。
2. 流水线等待阶段
代码合入 feature 分支后,需要等待大约 5 分钟完成流水线检查,包括编译和各类代码检查。这期间开发人员需要时不时刷新页面查看流水线状态。
3. 分支合并阶段
流水线通过后,还需要手动将 feature 分支合入部署分支(如沙盒环境分支)。合入后又要再等待一轮流水线,又是 5 分钟左右的等待和检查时间。
4. 部署准备阶段
接下来是最容易出错的环节:手动处理构建产物 URL。由于只有 master 分支支持构建版本号,开发人员需要手动复制编译产出的 URL,并根据部署需求修改 URL 后缀。这个步骤既繁琐又容易出错。
5. 部署配置阶段
在部署平台上,需要手动选择正确的服务、环境和发布策略,然后填写前面准备好的编译产出 URL。每一个选项都不能出错,否则可能导致部署失败或者部署到错误的环境。
6. 部署执行阶段
部署开始后,还需要持续关注部署状态,在特定阶段点击"继续"按钮。整个过程需要人工监控,无法安心去做其他事情。
问题总结
这个传统的部署流程存在几个明显的问题:
| 问题 | 影响 |
|---|---|
| 时间成本高 | 整个过程至少 15 分钟,其中大部分是等待时间 |
| 人工介入频繁 | 需要在不同阶段反复检查状态、手动操作 |
| 容易出错 | 手动处理 URL 和选择参数容易失误 |
| 体验割裂 | 需要在多个平台之间切换 |
自动化解决方案
针对这些痛点,我们设计并实现了一套自动化部署工具,实现了以下核心功能:
核心功能
1. 自动状态跟踪
工具会自动监控评审状态、流水线状态,无需人工刷新查看。通过轮询机制实时获取各个阶段的进度。
2. 智能分支管理
评审通过后自动完成分支合并,包括:
- 自动检测评审状态(+2)
- 自动合并到目标分支
- 自动触发流水线构建
3. 自动参数处理
构建 URL 的获取和修改全部自动化:
- 自动提取编译产物 URL
- 智能修改 URL 后缀适配不同环境
- 自动填充部署平台参数
4. 一站式操作
整合多平台功能,在一个工具内完成全流程:
- 代码评审平台集成
- CI/CD 流水线集成
- 部署平台集成
5. 可视化进度
清晰展示每个阶段的状态:
✅ 代码评审通过
⏳ 流水线构建中... (预计 3 分钟)
⏹ 等待部署
技术实现要点
架构设计
用户触发 → 状态机管理 → API 调用 → 进度展示
↓
错误处理 → 通知告警
关键技术
- 状态机模式:管理复杂的部署流程状态转换
- 异步任务:后台执行耗时操作,不阻塞用户
- 重试机制:网络异常时自动重试
- 日志记录:完整记录每次部署的详细信息
收益与效果
通过自动化改造,我们实现了显著的效率提升:
| 指标 | 优化前 | 优化后 | 提升 |
|---|---|---|---|
| 部署时间 | 15 分钟 | 5 分钟 | 66% ↓ |
| 人工操作 | 6 次 | 1 次 | 83% ↓ |
| 错误率 | ~5% | 0% | 100% ↓ |
| 平台切换 | 3 个 | 1 个 | 66% ↓ |
其他收益
- 降低学习成本:标准化流程,新人无需学习复杂的部署步骤
- 提升体验:开发人员可以专注于编码,无需关注部署细节
- 减少错误:完全消除手动操作导致的失误
- 可追溯性:完整的部署日志,便于问题排查
写在最后
回头看,这个工具最大的价值不在于"自动化"本身,而在于它从最耗时、最容易出错的那几个环节下手——手动复制 URL、跨平台来回切。把这些重复劳动消掉之后,部署不再是一件需要专门腾出时间盯着的事,开发人员可以安心去写代码。所谓"工欲善其事,必先利其器",大概就是这个意思。
