本篇文章目标
CI/CD
是什么?CI
和CD
的实现
1. CI/CD是什么?
CI
的全称是Continuous Integration
也就是持续集成CD
其实对应两个概念:CD
-持续交付(Continuous Delivery
)CD
-持续部署(Continuous Deployment
)
1.1 CI:持续集成(Continuous Integration)
“In software engineering,continuous integration (CI) is the practive of merging all developers' working copies to a shared mainline several times a day”
开发人员提交新代码之后,立即进行构建、(单元)测试。根据测试结果骂我们可以确定新代码和原有代码能否正确地集成在一起。
CI就是高频地、自动化地将个人开发的代码集成到开发主线中
- 高频:高频才能保证不会出现巨大变更引起的严重问题
- 自动化:自动化才可以保证高频
- 主线:不一定是master分支
1.2 CD-持续交付(Continuous Delivery)
“Continuous delivery(CD) is a software engineering approach in which teams produce software in short cycles,ensuring that the software can be reliably released at any time and, when releasing the sofeware,doing so manually”
在持续继承的基础上,将集成后的代码部署到更贴近真实运行环境的类生产环境
中
- 尽快的交付给
QA
人员 - 在
类生产环境
中测试 - 保证有一个“随时可发布”的版本
- 部署可以是手动的
1.3 CD-持续部署(Continuous Deployment)
“Continuous Deployment(CD) is softwrae engineering approach in which software functionalities are delivered frequently through automated deployments”
在持续交付的基础上,能够自动化地讲软件部署在真实生产环境
- 尽快地交付给用户
- 敏捷开发思想的体现
实际上持续交付和持续部署这两个概念不用分的特别清楚,在实践中,我们往往认为持续交付和持续部署这两者是一体的
1.4 CI/CD的意义和价值
- 敏捷开发思想的体现
- 频繁、自动化、可重复。流程像管道,代码像水
- 快速失败,尽早出现问题,尽早解决
- 不能保证BugFree,所以提高发布频率,降低单次发布风险
- 快速交付用户价值,拥抱市场变化
2. CI和CD的实现
2.1 CI的实现
CI重在个人对团队的交付,所以他关注的点有两个:
保证协作质量
- 代码风格检查
- 版本规范
- Git分支规范
- 自动化单元测试、端到端测试
- ...
保证失败可回溯
- 测试结果通知
- Changelog记录
- Code Review机制
- ...
2.2 CD的实现
持续交付和持续部署的过程是对QA和最终用户的交付的过程
持续交付
- 多种级别的测试环境
- QA团队对功能测试的快速响应
- 自动化测试覆盖率的检查
- 发布流程的标准化
- ...
持续部署
- 完善的项目迭代机制
- 渐进式的发布策略
- 线上监控告警
- 快速回滚能力
- ...