如何将公司的代码上线到生产环境?下载高分辨率 PDF 的方法见原推文末。
下图展示了一个常见的代码上线流程。
步骤 1:首先,产品经理会根据产品需求撰写用户故事(User Story)。
译注:通常一个用户故事的结构是
- 作为一个(As a)XXX 用户
- 我想要(I want) 增加/修改/移除 YYY 功能
- 这样的话(So that)提升/降低/改善
步骤 2:开发团队会从待办事项中选取这些用户故事,为其安排一个两周的开发周期。
步骤 3:开发人员会将他们的代码提交到 Git 仓库中。
步骤 4:代码提交后,Jenkins 会自动进行构建。此时,代码需要通过单元测试、代码覆盖率的标准,以及 SonarQube(代码质量检测工具) 的检查门槛。
步骤 5:当构建成功后,这个版本会被保存在Artifactory中,并被部署到开发环境进行测试。
译注:如果是基于Docker虚拟化技术的服务端,会build成虚拟化成 Image ,这样可以直接部署到K8s,如果不是虚拟化的服务端或者客户端的Release会有所不同,会保存打包后的文件。
步骤 6:可能有多个团队同时进行开发,他们各自的功能需要独立进行测试,因此这些功能会被部署到两个测试环境,即 QA1 和 QA2。
步骤 7:质量保证团队会在这些测试环境上进行功能测试、回归测试以及性能测试。
步骤 8:一旦通过了 QA 团队的测试,这个版本会被部署到 UAT 环境中,由开发团队、测试团队和产品经理共同完成用户验收测试。
译注:UAT,(User Acceptance Test),用户接受度测试即验收测试,UAT 环境主要是用来作为客户体验的环境。有时候也可以用测试环境替代。
步骤 9:只有在 UAT 测试全部通过后,这个版本才会被视为正式的发布版本,按照计划上线到生产环境。为了降低风险,我们可能采取分批发布或金丝雀发布(Canary release)等策略。
译注:“为什么叫金丝雀发布呢,是因为金丝雀对矿场中的毒气比较敏感,所以在矿场开工前工人们会放一只金丝雀进去,以验证矿场是否存在毒气,这便是金丝雀发布名称的由来。”
通过在线上运行的服务中,新加入少量的新版本的服务,然后从这少量的新版本中快速获得反馈,根据反馈决定最后的交付形态。
步骤 10:运维团队负责生产环境的稳定性和监控。他们使用了 ELK、Prometheus 和 Skywalking 等工具来分析日志和追踪系统性能。若发现问题,他们会及时通报给 QA 和开发团队,团队会优先处理这些问题。