定义:一天中多次的将所有工作者的工作合并到一个共享的主线的协作方式,具体来说是开发人员提交新代码后立即进行构建,测试。根据测试结果我们可以确定新代码和原代码是否能正确的集成到一起
CI / CD的意义和价值
- 敏捷开发思想的体现。
- 频繁、自动化、可重复。流程像管道,代码像水。
- 快速发现问题,快速解决(从软件质量的角度讲,快是为了让有问题的代码快速的被发现,尽早解决,在CD的阶段发现问题比在正式环境发现问题好,在CI阶段发现问题比在CD阶段发现问题好)。
- 不能保证Bug Free,所以提高发布频率,降低单次发布风险。
- 快速交付用户价值,拥抱市场变化。
CI - 持续集成:高频的将个人开发的代码集成到主线中
关键点
1、高频 :高频能保证不会有巨大的变化而引发不可控制的问题发生
2、自动化 :自动化可以保证高频
3、主线 :不一定是master,只要是团队成员共享的工作分支就行
CD - 持续交付(Continuous Delivery)和 持续部署 (continuous Deployment)
持续交付
软件工程中的一种方法,团队在很短的迭代内交付代码,确保可以随时的可靠的发布新版本,发布的时候可以进行手动的发布。
在持续集成的基础上,将集成后的代码部署到更贴近真实运行环境的「类生产环境」中。
它的优点是不用在每个大版本开发完成后上线,而是在每个小功能或模块开发完成后就可以上线。
关键点
1、可以尽快的交付给测试人员
2、测试成员在「类生产环境」中测试
3、保证有一个“随时可发布”的版本
4、部署可以是手动的
持续部署
也是软件工程中的一种方法,它通过自动的部署行为来快速的频繁的交付软件。
在持续交付的基础上,自动化的将项目部署到真实的生产环境。
它可以尽可能快的交付给用户,是敏捷开发思想的体现
CI 的实现
CI在工作流程中站在个人与团队交互的角度,关注点主要在以下两个
1、保证协作质量
- 代码风格检查
- 版本规范
- Git 分支规范
- 自动化单元测试、端到端测试
- ...
2、保证失败后可追溯
- 测试结果通知到责任人
- 清晰的Changelog记录,有利于快速定位问题是那个版本引发的
- Code Review机制
- ...
CD 的实现
1、持续交付
- 多种级别的测试环境(每一次的测试都应该在更接近真实环境的条件下进行)
- QA团队对功能测试的快速响应
- 自动化测试覆盖率的检查(覆盖率越大风险越小)
- 发布流程的标准化(节省发布时间和防止在发布阶段产生新的风险)
2、持续部署
- 完善的项目迭代机制
- 渐进式的发布策略(保证发布过程的稳定)
- 线上监控告警(及时发现线上的问题和通知责任人)
- 快速回滚能力(快速恢复到某一稳定版本)
- ...