灰度发布:从概念到实践,如何实现平滑可控的软件迭代

发布时间:2026/8/18 1:16:32

灰度发布:从概念到实践,如何实现平滑可控的软件迭代
1. 灰度发布从概念到价值的深度拆解如果你在技术团队待过一段时间尤其是负责过线上服务的迭代大概率听过“灰度发布”这个词。它听起来有点“黑话”色彩不像“上线”、“回滚”那么直白但却是现代软件交付流程中尤其是互联网产品一个至关重要的安全阀门。简单来说灰度发布就是一种控制新版本软件只对一小部分用户可见的发布策略。你可以把它想象成一场新电影上映前的“点映”——不是一下子铺开给所有观众而是先邀请一部分影评人或特定城市的观众观看收集反馈、评估口碑再决定是否大规模公映或者需要回炉修改。这个策略的核心价值就在于它把“全量发布”这个充满风险的“二进制开关”要么成功要么故障变成了一个可以平滑调节、随时观察的“旋钮”。对于技术开发而言它的意义远不止是“减少线上事故”这么简单。它深刻改变了我们对待代码变更的态度从“祈祷式上线”转向“数据驱动式迭代”。今天我们就来彻底拆解一下灰度发布看看它到底是怎么运作的以及它究竟能给我们的技术研发工作带来哪些实实在在的好处。2. 灰度发布的运作机制与核心设计思路要理解灰度发布的价值首先得弄清楚它是怎么“灰度”起来的。这里的“灰度”形象地描述了用户从旧版本黑色过渡到新版本白色的中间状态——不是非黑即白而是存在一片灰色的、逐步过渡的区域。2.1 核心运作模型流量切分与用户分组灰度发布的本质是对流量或用户的精细化控制。其基本模型可以概括为以下几步新版本部署将新版本的服务代码我们称之为版本B与当前稳定运行的旧版本版本A同时部署在线上环境中。它们通常是两套独立但并行的服务实例。流量路由策略制定引入一个“流量调度器”可以是网关、负载均衡器或专门的中间件。这个调度器不直接转发所有请求而是根据预设的规则决定将每个请求分发给版本A还是版本B。逐步放量初始阶段调度器将极少量例如1%的线上流量导入版本B其余99%的流量仍走版本A。此时只有1%的用户会体验到新功能或新改动。监控与观察技术团队紧密监控版本B的各项指标包括业务指标如点击率、转化率、性能指标如接口响应时间、错误率、系统指标如CPU、内存使用率等。同时也可以通过反馈渠道收集这1%用户的直接意见。决策与推进如果监控数据一切正常用户反馈积极则逐步扩大灰度范围例如从1%到5%再到20%、50%。这个过程可能持续数小时甚至数天。如果在任何阶段发现严重问题可以立即将流向版本B的流量切回版本A实现快速回滚影响范围被控制在灰度用户内。全量发布或回滚最终如果灰度到100%后依然稳定则版本B成为新的稳定版版本A可以下线。如果中途发现问题则回滚至版本A并停止灰度。这个模型的关键在于“可控”和“可观测”。它把一次大的发布动作拆解成了多个小的、可逆的步骤。2.2 常见的灰度策略与适用场景根据不同的业务目标我们可以采用不同的灰度策略也就是定义“哪些用户走新版本”的规则随机百分比灰度最简单直接的策略。纯粹按随机比例将用户请求分到新版本。适用于测试新版本的通用性能和稳定性对用户群体无特殊要求。用户属性灰度根据用户属性进行筛选。例如内部员工/测试用户先行让公司内部员工或招募的测试用户首批体验便于早期发现问题。按用户ID尾号/哈希例如用户ID以0-9结尾先让尾号为0的用户灰度。这种方式能保证同一用户每次访问都进入同一版本体验一致。按地域灰度先发布给某个特定城市或国家的用户常用于测试地域相关的功能或合规性。按设备/平台灰度先发布给iOS用户或特定安卓机型的用户针对平台特性进行测试。业务参数灰度更精细的策略根据请求本身的业务含义来划分。例如只对订单金额小于100元的交易请求启用新版本支付逻辑或者只对VIP用户开放某个新功能。这种策略能实现风险与价值的精准匹配。注意选择哪种策略取决于你的发布目标。如果目标是验证核心链路稳定性随机百分比灰度就够了。如果目标是测试一个可能影响高价值用户的功能那么按用户属性如VIP等级灰度就是必须的。3. 灰度发布为技术开发带来的核心价值理解了“怎么做”我们再来深入探讨“为什么一定要做”。灰度发布的价值是立体而多层次的它不仅仅是一个运维工具更是一种研发理念的体现。3.1 价值一极大降低线上风险提升系统稳定性这是灰度发布最直接、最被认可的价值。在没有灰度发布的时代一次重大的全量上线如同“渡劫”所有研发、测试、运维人员严阵以待一旦出现未预料的Bug轻则导致部分功能异常重则引发服务雪崩所有用户受影响回滚过程也可能手忙脚乱。引入灰度发布后爆炸半径可控任何问题最初只影响极小部分的灰度用户比如1%。这1%的用户体验受损固然不是好事但相比100%的用户不可用其业务损失和舆论压力完全不在一个量级。回滚成本极低发现问题后在流量调度器上修改一个配置瞬间就能将所有流量切回老版本几乎是无损、即时回滚。这给了技术团队巨大的安全感敢于进行更积极的迭代。真实环境验证测试环境再完善也无法100%模拟线上复杂的网络环境、用户数据、并发压力和海量配置。灰度发布相当于在真实的“战场”上先用一支“特种小队”进行侦察提前暴露只有在全量环境下才会出现的问题如内存泄漏、并发竞争、特定数据兼容性问题等。3.2 价值二实现数据驱动的功能迭代与产品决策灰度发布让技术动作和业务效果之间建立了可衡量的桥梁。它不仅仅是为了“不发错”更是为了“做得对”。A/B测试的天然基础灰度发布是进行A/B测试对比试验的前提。你可以将用户分为A组旧版本/旧策略和B组新版本/新策略在保证其他条件一致的情况下对比两组的关键业务指标如按钮点击率、购买转化率、用户停留时长。通过统计显著性分析可以科学地判断新功能或新算法是否真的带来了正向收益而不是凭感觉决策。实操示例产品经理认为将商品详情页的“加入购物车”按钮从绿色改为橙色能提升转化。开发两套UI通过灰度发布分别展示给50%的用户持续一周后分析数据。如果橙色按钮组的转化率显著高于绿色组则全量发布橙色方案如果无差异或更差则放弃此改动。这个过程完全由数据说话。渐进式验证产品假设很多产品想法在原型阶段看似完美但用户真实反馈可能截然不同。通过灰度发布可以将一个完整的大功能拆解成几个小步骤逐步放量并收集用户行为数据。如果数据表现不佳可以在影响扩大前及时调整方向避免资源浪费。3.3 价值三优化团队协作与发布流程提升开发信心灰度发布改变了团队的工作节奏和心理状态。解除发布恐惧症对于开发者而言最怕的就是自己写的代码搞垮线上服务。灰度发布像是一个“安全网”让开发者敢于提交更具创新性但也可能更有风险的代码因为知道有兜底机制。这有利于激发技术创造力。平滑的发布节奏传统发布可能需要定一个“发布窗口”通常是深夜流量低峰期团队熬夜待命。灰度发布支持在业务时间段内从容地开始灰度逐步放量团队可以正常工作时间监控发布过程变得常态化、平滑化减轻了运维压力。促进DevOps文化灰度发布的顺利实施依赖于开发、测试、运维、产品等多个角色的紧密协作。开发需要编写可灰度的代码如功能开关运维需要提供灵活的流量调度能力产品需要关注灰度数据。这个过程天然地促进了跨职能团队的融合与协作。3.4 价值四提升用户体验与品牌信任度从用户侧看灰度发布也是一种负责任的体现。避免大规模体验中断即使新版本有Bug受影响的也只是小部分用户大部分用户感知不到任何异常服务连续性得到保障。收集真实用户反馈灰度用户提供的反馈往往比实验室测试更有价值。他们会在真实的使用场景中发现问题提出改进建议这些声音对于打磨产品至关重要。建立技术可靠性形象一个很少出现全站宕机、功能异常能快速恢复的产品会在用户心中建立起“稳定”、“可靠”的品牌形象。灰度发布是达成这一目标的关键技术实践。4. 实施灰度发布的关键技术组件与实操要点知道了价值下一步就是如何落地。搭建一套可用的灰度发布体系并不一定需要重金购买商业产品但需要理解其核心组件。4.1 核心架构组件一个典型的灰度发布系统包含以下几层流量入口层网关/负载均衡器这是流量分发的起点。现代API网关如Nginx, Kong, Apache APISIX, Envoy都具备强大的流量切分能力。它们可以根据请求头如自定义的x-user-id、Cookie、查询参数或客户端IP等信息匹配预设规则将请求路由到不同的上游服务组即版本A或版本B的服务集群。配置管理中心用于动态管理灰度规则。规则不能硬编码在网关里需要一个中心化的配置服务如Consul, Etcd, Apollo, Nacos来存储和下发。这样运维人员可以通过管理界面实时修改灰度比例、调整用户分组策略而无需重启网关服务。服务实例与注册中心版本A和版本B的服务实例需要向服务注册中心如Eureka, Nacos, Consul注册自己并带上版本标签如version: v1.0和version: v1.1。网关从注册中心拉取服务实例列表时就能区分不同版本。监控与告警体系这是灰度发布的“眼睛”。必须建立完善的监控对比灰度组和全量组的核心指标。监控应包括应用性能监控APM追踪请求链路对比两个版本的响应时间、错误率。业务指标监控通过埋点上报实时分析灰度用户的点击、转化、留存等数据。系统资源监控观察CPU、内存、磁盘I/O、网络流量是否有异常波动。日志聚合分析集中收集和分析错误日志快速定位问题。功能开关Feature Flag这是一个代码层面的辅助技术。即使在同一个服务版本内也可以通过功能开关动态启用或禁用某个新功能。它常与灰度发布结合使用实现更细粒度的控制。例如即使流量被路由到了版本B也可以通过开关只让部分用户看到功能X另一部分用户看不到。4.2 实操步骤与配置示例以Nginx为例假设我们有一个用户服务user-service当前稳定版为v1.0新开发版为v1.1。我们想按用户ID的尾号进行灰度尾号为0-4的用户走新版本。服务部署与注册部署user-service:v1.0实例注册时携带标签versionv1.0。部署user-service:v1.1实例注册时携带标签versionv1.1。Nginx网关配置 我们需要在Nginx中编写Lua脚本或使用nginx-module来实现基于用户ID的路由逻辑。这里给出一个简化的配置思路。http { # 定义两个上游服务组 upstream user_service_v1 { server 192.168.1.10:8080; # v1.0 实例 server 192.168.1.11:8080; } upstream user_service_v2 { server 192.168.2.10:8080; # v1.1 实例 server 192.168.2.11:8080; } server { listen 80; server_name user.api.example.com; location / { # 默认访问v1版本 set $upstream_group user_service_v1; # 获取用户ID假设通过请求头X-User-Id传递 set $user_id $http_x_user_id; # 如果获取到用户ID则进行灰度判断 if ($user_id ! ) { # 使用取模运算获取尾号这里模拟尾号0-4走v2 # 注意实际生产环境会用更均匀的哈希函数这里仅为示例 set $last_digit \${user_id} % 10\; if ($last_digit ~ ^[0-4]$) { set $upstream_group user_service_v2; } } # 代理到相应的上游组 proxy_pass http://$upstream_group; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } } }重要提示上述Nginx配置中的if指令在性能和高并发下需谨慎使用且取模运算简单可能不够均匀。生产环境通常会采用更高效的方式如利用nginx-lua模块编写更复杂的路由逻辑或直接使用OpenResty、Kong等更强大的网关。动态配置管理 上述配置是静态的。理想情况是将灰度规则如“尾号0-4”存储在配置中心。Nginx通过定时拉取或长连接监听配置变化动态更新路由逻辑实现不停机调整灰度策略。发布与监控流程启动灰度在配置中心将灰度规则设置为“内部员工100%”。观察日志和监控。小范围放量将规则改为“用户ID尾号01%流量”。监控核心接口响应时间和错误率。逐步扩大根据监控情况逐步将尾号范围扩大到0-110%0-220%……直至0-450%。每步之间预留足够的观察时间如30分钟到数小时。全量切换确认v1.1在50%流量下稳定运行超过24小时且业务指标正常或更优。将规则改为“全量流量至v1.1”。清理旧版本观察v1.1全量后一段时间确认无误后下线v1.0的服务实例。5. 实施灰度发布的常见“坑”与避坑指南灰度发布不是银弹实施不当也会引入新的复杂性和问题。下面是一些我亲身踩过或见别人踩过的“坑”。5.1 数据一致性与兼容性问题这是灰度发布中最棘手的问题之一。当两个版本的代码同时读写同一份数据时极易出问题。场景版本A的代码写入数据库的字段是status: 1而版本B的代码逻辑修改了它期望读取到的值是status: \active\。如果版本A写入了数据版本B来读就会解析错误。避坑指南向后兼容新版本B的代码必须能够正确处理旧版本A产生的所有数据格式。这是铁律。数据库 schema 变更需谨慎增加字段通常安全但修改字段含义、删除字段或修改字段类型必须采用“双写双读”、“影子字段”、“版本化迁移”等平滑方案确保两个版本都能正常工作。接口兼容性如果服务间通过API调用新版本接口应尽量保持向前兼容。如需不兼容升级应通过版本号如/v2/user区分并在一段时间内同时维护新旧接口。5.2 灰度策略设计不当问题灰度用户选取不随机导致样本偏差。例如按注册时间灰度早期用户可能都是“死用户”无法反映真实活跃用户的行为。避坑指南尽量使用均匀的哈希算法如对用户ID进行一致性哈希来分配流量确保样本的随机性和代表性。对于A/B测试尤其要注意样本的随机分配。5.3 监控盲区与告警疲劳问题只监控了系统级指标如CPU忽略了业务级指标如下单失败率。或者在灰度初期对新版本设置了过于敏感的告警导致告警频发团队逐渐麻木“狼来了”效应当真正严重的问题出现时反而被忽略。避坑指南建立对比监控不仅要看新版本的绝对值更要看与老版本的相对值。例如新版本的错误率比老版本高出了50%这就是一个强烈的危险信号即使其绝对值看起来不高。分层监控与告警定义清晰的告警等级。对于1%的灰度流量可以只设置P1致命级别的告警如服务完全不可用。当流量扩大到20%时再启用P2严重级别告警如错误率飙升。告警信息要清晰指出是“灰度环境”的问题。业务指标监控自动化将核心业务指标如支付成功率、关键页面加载时长的对比监控做成仪表盘让产品和运营同学也能直观看到灰度效果。5.4 功能开关滥用与代码腐化问题为了灰度在代码中埋设了大量的功能开关if-else。灰度结束后开关逻辑没有及时清理导致代码中充斥着废弃的路径逻辑复杂难以维护这就是“代码腐化”。避坑指南为开关设定生命周期每个功能开关在创建时就应该明确其目的和预计的清理时间例如“用于A/B测试预计两周后清理”。定期清理建立流程在每次发布后或定期如每季度扫描代码中的功能开关对于已经全量或废弃的功能坚决移除其开关逻辑。使用专业的开关管理服务考虑使用LaunchDarkly、Flagsmith等专业服务它们能更好地管理开关的生命周期并与灰度发布流程集成。5.5 团队协作与流程缺失问题开发完成了灰度代码但运维不知道如何配置路由产品不知道去哪里看数据测试不知道如何验证灰度功能。整个流程脱节。避坑指南将灰度发布作为一个标准化的研发流程固化下来。定义清晰的角色和职责RACI矩阵并借助工具链将其自动化。例如在CI/CD流水线中集成灰度发布的步骤代码合并后自动部署到灰度环境自动配置初始的1%内部流量规则并自动将监控仪表盘链接发送到工作群。实施灰度发布技术上搭建平台只是第一步更重要的是在团队中建立起与之匹配的流程、文化和风险意识。它不是一个一劳永逸的工具而是一个需要持续优化和磨合的实践。从第一次小心翼翼地放出1%的流量开始你会逐渐体会到这种“可控感”带来的从容也会更深刻地理解稳健的软件交付本身就是一种强大的竞争力。

相关新闻

告别付费墙:三步用 Wand-Enhancer 免费解锁 WeMod 高级功能与手机远程控制

告别付费墙:三步用 Wand-Enhancer 免费解锁 WeMod 高级功能与手机远程控制

2026/8/18 1:16:32

告别付费墙:三步用 Wand-Enhancer 免费解锁 WeMod 高级功能与手机远程控制 【免费下载链接】Wand-Enhancer Advanced UX and interoperability extension for Wand (WeMod) app 项目地址: https://gitcode.com/GitHub_Trending/we/Wand-Enhancer 晚上十一点&…

手动存了50个抖音视频后,我换成了这个批量下载器,一次跑通全流程

手动存了50个抖音视频后,我换成了这个批量下载器,一次跑通全流程

2026/8/18 1:16:32

手动存了50个抖音视频后,我换成了这个批量下载器,一次跑通全流程 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and b…

深度学习模型部署与推理性能调优:先确认它值不值得用 AI

深度学习模型部署与推理性能调优:先确认它值不值得用 AI

2026/8/18 1:06:32

深度学习模型部署与推理性能调优:先确认它值不值得用 AI本文围绕“先确认它值不值得用 AI”整理检查要点。示例仅用于说明方法;请以公开、合成或已脱敏输入复跑。1. 先固定讨论边界 推理调优应先明确输入形状、并发模型、预热规则和验收口径。准确率、排…

Spring无Agent调试器:原理、优势与实践

Spring无Agent调试器:原理、优势与实践

2026/8/18 2:16:34

1. 项目概述:Spring Debugger的独特设计哲学 这个被30万开发者使用的Spring Debugger工具,最引人注目的特点就是它坚持不使用Agent技术来实现调试功能。在Java生态中,Agent技术几乎是调试工具的标准实现方式,但这款工具却选择了截…

ECK在K8S中的部署与运维实践

ECK在K8S中的部署与运维实践

2026/8/18 2:16:34

1. 项目概述:ECK在K8S生态中的定位 Elastic Cloud on Kubernetes(ECK)是Elastic官方提供的Operator实现,它彻底改变了传统Elasticsearch集群在Kubernetes中的部署和管理方式。与使用Helm chart或手动部署相比,ECK通过C…

CachyOS性能调优实战:从激进优化到系统平衡的艺术

CachyOS性能调优实战:从激进优化到系统平衡的艺术

2026/8/18 2:16:34

上周,我决定把用了三年的主力桌面系统换掉。不是因为旧系统不好,而是我偶然间看到了一个关于 CachyOS 的讨论,说它“快得有点不正常”。作为一个常年和编译、虚拟机、大型应用打交道的人,“快”这个字眼对我有致命的吸引力。我心想…

千兆以太网滑环性能测试指南:从原理到实践的全流程解析

千兆以太网滑环性能测试指南:从原理到实践的全流程解析

2026/8/18 2:16:34

在实际工业自动化、机器人、雷达和旋转设备场景中,我们经常需要将高速数据信号(如千兆以太网)通过一个旋转的机械接口进行传输,这个接口就是滑环。一个核心的工程挑战在于:如何验证和确保通过滑环后的千兆以太网链路&a…

自适应滤波算法在胎儿心电信号提取中的应用与优化

自适应滤波算法在胎儿心电信号提取中的应用与优化

2026/8/18 2:16:34

1. 项目背景与核心挑战胎儿心电信号提取是生物医学信号处理领域的经典难题。孕妇腹部采集的混合心电信号(ECG)通常包含三部分:母体心电信号(强度约1-5mV)、胎儿心电信号(强度仅20-100μV)以及各…

零符号引擎:无符号静态分析量化评估Windows RPC攻击面风险

零符号引擎:无符号静态分析量化评估Windows RPC攻击面风险

2026/8/18 2:06:34

1. 先搞清楚“零符号引擎”到底在解决什么实际问题 如果你负责Windows服务器的安全评估,或者在做红蓝对抗、渗透测试,肯定遇到过这类头疼事:面对一个庞大的Windows系统,想知道哪些RPC接口是暴露的、哪些可能存在未授权访问或权限提…

【文章复现】非线性值迭代自适应动态规划(ADP):离散时间非线性系统的策略迭代自适应动态规划算法研究附Matlab代码

【文章复现】非线性值迭代自适应动态规划(ADP):离散时间非线性系统的策略迭代自适应动态规划算法研究附Matlab代码

2026/8/17 1:28:42

✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。🍎 往期回顾关注个人主页:Matlab科研工作室👇 关注我领取海量matlab电子书和…

【双层规划,节点出清价,绿证交易,CVaR方法】两级电力市场环境下计及风险的省间交易商最优购电模型附Matlab代码

【双层规划,节点出清价,绿证交易,CVaR方法】两级电力市场环境下计及风险的省间交易商最优购电模型附Matlab代码

2026/8/18 1:03:22

✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。🍎 往期回顾关注个人主页:Matlab科研工作室👇 关注我领取海量matlab电子书和…

隐式mpc+自适应mpc+时变mpc,线性时变模型预测控制附Simulink仿真

隐式mpc+自适应mpc+时变mpc,线性时变模型预测控制附Simulink仿真

2026/8/17 8:40:51

✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。🍎 往期回顾关注个人主页:Matlab科研工作室👇 关注我领取海量matlab电子书和…

多智能体大模型辩论中的立场收敛:从伪共识到理性说服的评估方法

多智能体大模型辩论中的立场收敛:从伪共识到理性说服的评估方法

2026/8/18 0:06:29

1. 从一场“假辩论”说起:为什么大模型辩论会走向“伪共识”?最近在折腾多智能体大语言模型(Multi-Agent LLM)的辩论实验,发现一个挺有意思的现象。我让几个基于GPT-4的智能体就一个争议性话题(比如“远程办…

Frida动态代码插桩框架:从原理到实战的移动安全与逆向工程指南

Frida动态代码插桩框架:从原理到实战的移动安全与逆向工程指南

2026/8/18 0:06:29

1. 从“黑盒”到“白盒”:为什么我们需要Frida在移动安全、逆向工程甚至是一些自动化测试的场景里,我们经常会遇到一个让人头疼的问题:面对一个编译好的、没有源代码的应用程序,我们如何知道它在运行时内部发生了什么?…

ECharts饼图中心文字配置指南:从label与title区别到动态交互实现

ECharts饼图中心文字配置指南:从label与title区别到动态交互实现

2026/8/18 0:06:29

1. 从“空心”到“有魂”:为什么要在饼图中间加文字?如果你用过ECharts画饼图,大概率会注意到一个现象:默认生成的饼图中间是空心的。这个设计本身没问题,它清晰地展示了各个扇区的占比关系。但在很多实际的业务场景里…

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

2026/8/17 12:00:53

一天写完毕业论文在2026年已不再是天方夜谭。2026年最炸裂、实测能大幅提速的AI论文写作工具,覆盖选题构思、文献整理、内容生成、格式排版等核心场景,真正帮你高效搞定论文难题。 一、全流程王者:一站式搞定论文全链路(一天定稿首…

导师推荐!2026最新AI论文工具测评与实用推荐

导师推荐!2026最新AI论文工具测评与实用推荐

2026/8/15 10:10:27

2026年真正好用的AI论文工具,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。 一、…

告别游戏崩溃:XCOM 2模组管理器的智能革命

告别游戏崩溃:XCOM 2模组管理器的智能革命

2026/8/14 19:35:14

告别游戏崩溃:XCOM 2模组管理器的智能革命 【免费下载链接】xcom2-launcher The Alternative Mod Launcher (AML) is a replacement for the default game launchers from XCOM 2 and XCOM Chimera Squad. 项目地址: https://gitcode.com/gh_mirrors/xc/xcom2-lau…