应用集成
持续集成(Continuous Integration)
开发人员提交代码之后,立即进行构建、测试(自动化的单元测试或集成测试),让提交的代码得到快速的质量反馈,并确保集成的代码不会破坏原有代码的功能正确性。
持续集成让提交的代码能快速得到反馈,测试通过后才能将代码成功集成到集成分支中,从而减少集成后出现的问题。对于现代的分布式应用开发任务而言,持续集成是:通过自动化的手段,持续的构建和验证快速演进的分布式应用所有组成部分,为团队提供有效的反馈和信心;自动化的手段意味着低成本,可重复;有效的反馈,意味着更快的定位问题,交付质量更高的软件;有效践行持续集成的软件开发团队具备更高的软件开发效能。
从上述的定义出发,有效的持续集成应该具备如下特征:
快速反馈环:有问题的变更越往后定位的代价就越高,每一次集成对团队而言都是一次反馈环,所有的反馈都被团队转换成有效的行动项,使得问题被尽早发现,尽早修复。
自动化:每一次的代码提交都应该触发自动构建和自动测试,并通过红绿的颜色告知团队所有成员。
常见的自动触发,是通过自动化的 CI 服务或工具,自动监听代码库 Git Push & MR 等事件触发,常见的工具如 Jenkins、GitlabCI、CircleCI、GithubActions 等等。
持续交付(Continuous Delivery)
是持续集成的下一步,持续频繁地将软件的新版本交付到类生产环境(常见的如:测试、预发环境),交付给测试、业务团队验收。
持续交付强调的是“交付”,不管怎么更新,软件是随时随地可以交付的,相比持续集成,持续交付除了交付到类生产环境之外,还会执行一些集成测试、API测试等等,确保交付的产物可以直接交付部署。
持续部署(Continuous Deployment)
是持续交付的下一步,“自动”将代码部署到生产环境,持续部署强调的是“部署”,它的目标是,代码在任何时刻都是可部署的,可以进入生产阶段。
持续部署和持续交付触发方式的区别是,持续部署是自动完成的,持续交付是手动完成的。
CI/CD流水线
云效流水线 Flow 是一款企业级、自动化的持续集成和持续交付工具,通过构建自动化、集成自动化、验证自动化、部署自动化,完成从开发到上线的CI/CD全流程,帮助企业高质量、高效率的交付业务。
部署策略
在真实的上线过程中,如果采用全量发布,会给开发运维团队带来未知的风险,为了减少发布对线上业务的影响, 在应用部署过程中,建议采用灰度发布,分批发布这种模式,可以最大限度的避免不稳定发布对用户的影响, 保障业务交付稳定。
发布过程可观测
对于生产系统,一旦线上有代码变更,那就要开始关注业务的可观测性。可观测性主要包括如下三个方面:
指标监控:即各种指标监控,比如基础资源指标(如主机CPU、内存使用率),服务性能指标(响应时间RT上升等),业务的调用指标(如用户登录失败数上升,下单失败上升等)。指标也需要再做下分级,具体可以查看可观测性章节。
日志:要关注各种设备和服务的运行日志监控,特别要关注是否有异常或Error日志。
调用链:关注当前发布的应用其上下游调用链分析。
发布回滚
一旦代码发布到生产之后,服务或业务如果有影响,优先执行回滚,确保业务平稳。在回滚过程中需要考虑服务是否具备平滑,数据是否存在脏写等问题。
企业选择相关CI/CD工具的时候也要关注需要支持快速回滚的能力。阿里云云效服务提供回滚操作,用户可在流水执行记录下的部署历史中,查看到该流水线所有执行的部署历史记录,并可选择其中任意一条历史记录进行回滚操作。云效流水线会根据当时运行的部署脚本和构建制品重新执行部署任务,以实现回滚的效果。