携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第28天,点击查看活动详情
持续集成
1. 概念
- 持续集成是一种软件工作流程,是将所有软件工程师对于软件的工作副本持续整合到共用主线的一种举措
2. 基本原则
- 只维护一个源码仓库
- 自动化 build
- 让你的的 build 自行测试
- 每人每天都要向 mainline 提交代码
- 每次提交都应在集成计算机上重新构建 mainline
- 保持快速 build
- 在类生产环境中进行测试
- 让每个人都能轻易获得最新的可执行文件
- 每个人都能看到进度
- 自动化部署
- 构建失败之后不要提交新代码
- 提交前在本地,或者持续集成服务器,运行所有测试
- 提交测试通过后再继续工作
- 回家之前,构建必须处于成功状态
- 时刻准备着回滚到前一个版本
- 在回滚之前要规定一个修复时间
- 不要将失败的测试注释掉
- 为自己导致的问题负责
- 测试驱动的开发
3. 持续集成的价值
- 软件项目主要面临问题
- 没有一致的可部署软件
- 项目后期发现缺陷,难以修复
- 低品质的软件产品
- 项目缺少可见性
- 持续集成可实现价值
- 减少项目风险
- 减少重复过程
- 在任何时间任何地点生成可部署软件
- 增强项目可见性
- 对开发团队的软甲产品建立起更强大的信息
4. 持续集成的流程
5. 持续集成的主流工具
- 代码托管
- GitHub
- CodeHub
- gitee
- 编译构建
- APACHE ANT
- Maven
- Gradle Build Tool
- 集成测试
- Jenkins
- CodeShip
- TeamCity
6. 企业实践(Facebook)
- Facebook 先将变更经过一系列的自动化测试之后,从内部推送到 Facebook 员工(即图中C1),在此阶段发生的任何问题都会认为是工作阻塞,高优先级的去解决
- 金丝雀部署(图中C2),只将变更推送到生产环境的 2%的服务器,依靠连续的监测来发现问题,若一切顺利,这些变更将 100%地部署到生产环境中(即图中C3),否则,如果在任何时候出现问题,所有流量都会被回滚至之前的版本
金丝雀发布:实时流量逐渐从旧版本迁移到新版本直到更新生效