在本文中,我们将概述一个强大而高效的 Web 应用程序发布流程,该流程以基于主干的开发和基于环境的功能标志为基础。此方法可确保持续集成、轻松进行生产测试以及从开发到发布的顺利进行,同时保持高质量标准。
核心原则
基于主干的开发:主干分支是所有开发工作的唯一真实来源。开发人员从主干创建功能分支(例如,feature/xyz)以添加新功能或 Jira 工单。拉取请求 (PR) 从这些功能分支提交到主干,以便在测试成功后进行审查和合并。基于环境的功能标记:功能标记用于控制跨环境的功能激活。标记存储在特定于环境的配置文件中或作为 CI/CD 管道配置的一部分。在主干分支中,所有功能标记默认设置为 OFF。可以根据需要在特定环境(例如,沙盒、暂存或生产)中将标记切换为 ON。Sprint 中的 JIRA 版本

环境部署流程
沙盒或暂存环境:对于 QA 和集成测试,团队可以从主干创建一个以 sandbox/ 为前缀的分支(例如 sandbox/xyz)。此分支使用 CI/CD 管道部署到专用的沙盒或暂存环境。QA 团队可以验证新功能,集成测试可以确保兼容性。在此环境中,功能标志处于开启状态,以测试特定功能。生产版本准备:要准备发布,请从主干创建一个 release/xyz 分支。release/xyz 分支作为发布候选版本,最初部署到 5% 的生产流量进行 beta 测试。此分支中的新功能功能标志已切换为 ON,以允许在生产中进行测试。Nginx 或类似的负载平衡器可以处理此流量分配,确保只有一部分用户可以看到更改。功能标记:示例和用法
标志结构:将功能标志存储在配置文件中(例如,config / feature-flags.json):{“feature_xyz”:false,“feature_abc”:true}使用环境变量在运行时控制标志:FEATURE_XYZ=true FEATURE_ABC=false npm start后端示例:在代码中切换标志:const featureFlags = require('./config/feature-flags'); if (featureFlags.feature_xyz) { console.log('Feature XYZ is enabled!'); } else { console.log('Feature XYZ is disabled.'); }前端示例:使用标志有条件地渲染 UI 组件:if (process.env.REACT_APP_FEATURE_XYZ === 'true') { render(); } 其他 { 渲染(); }测试期间切换标志:要切换测试标志,请更新配置或环境变量并重新启动相关服务(前端或后端):FEATURE_XYZ=true npm start对于 CI/CD 管道,确保在部署期间将适当的标志值注入到环境中。生产测试
用于 Beta 测试的流量路由:使用 Nginx 配置控制流量分配:http {upstream stable_backend {server stable_backend_1; server stable_backend_2;}upstream canary_backend {server canary_backend_1; server canary_backend_2;}upstream hybrid_backend {server stable_backend_1 weight=45; server stable_backend_2 weight=45; server canary_backend_1 weight=5; server canary_backend_2 weight=5;}server {listen 80;server_name my-app.example.com;location / {if ($http_x_qa_test = "true") {proxy_pass http://canary_backend;break;}proxy_pass http://mixed_backend;}} }通过调整负载均衡器权重将 5% 的生产流量路由到运行新版本的服务器。生产中的专用 QA 测试:QA 团队可以在请求中附加自定义 cookie(例如 qa-test=true)。Nginx 会检查此 cookie 并将这些请求 100% 路由到新版本,确保在生产中进行有针对性的测试。稳定发布
修复问题:开发人员通过向主干分支提交 PR 来修复 Beta 测试期间发现的任何问题。合并后,这些修复会被挑选到 release/xyz 分支中。完成发布:解决所有问题且分支稳定后,发布分支将标有语义版本(例如 v1.2.0),从而触发部署到稳定后端。生成发布说明以供记录并与利益相关者共享。热修复流程
创建修补程序分支:对于紧急修复,直接从最新生产标签创建修补程序/xyz 分支。修补程序分支遵循与发布分支相同的稳定和标记流程。版本控制:修补程序按照语义版本控制 (SemVer) 标准增加补丁版本(例如,从 v1.2.0 到 v1.2.1)。分支清理
定期删除合并的分支以避免混乱。定期删除未使用的功能标志以维护组织。使用 GitHub Actions 或类似工具自动删除合并后的分支。替代 QA 和测试策略
除了 Cookie 之外,在生产中路由 QA 流量的其他策略包括:
基于标头的路由:QA 在其请求中添加自定义标头(例如,X-QA-Test: true)。Nginx 将这些请求路由到新版本进行测试。基于 IP 的路由:根据 QA 的 IP 地址限制到新版本的流量。基于身份验证令牌的路由:QA 使用与角色或令牌绑定的特定测试帐户登录,以确保请求被路由到新版本。结论
此发布流程利用基于主干的开发和基于环境的功能标记来创建可扩展、可测试且适合生产的部署工作流。通过使用沙盒环境、流量路由和专用测试策略,团队可以在最大限度地降低风险的同时提供高质量的功能。这种方法可确保尽早发现问题并有效解决问题,为无缝推出功能和修补程序铺平道路。