我们经常会听到持续集成(Continuous Integration)、持续交付(Continuous Delivery)和持续部署(Continuous Deployment)这三个名词,这三个名词之间有什么联系,有什么区别,以及为什么要做持续集成,持续交付,让我们带着疑问往下看。
图片来源
持续集成[Continuous Integration]
持续集成是已代码的提交活动来触发的。持续集成涉及到一下几个步骤:
- 开发人员提交代码到代码仓库
- 持续集成服务器检测到代码更新,从代码仓库拉取最新的代码
- 代码更新完毕后,持续集成服务器自动进行编译、代码静态检查以及测试(单元测试)
持续交付[Continuous Integration]
持续交付是建立在持续集成成功的基础上的,比如代码编译成功,并且通过了单元测试,这个时候我们可以把代码部署到测试环境(也就是和生产环境相近的环境)在这里我们完成更多的测试(自动化契约测试、自动化UI测试等),通过一系列测试后,通过手动的方式把代码部署到生产环境上。
持续部署[Continuous Integration]
持续部署是在持续交付成功的基础上,通过自动化的方式把代码部署到生产环境上。
CI/CD的价值
“Continuous Integration doesn’t get rid of bugs, but it does make them dramatically easier to find and remove.” — Martin Fowler
Martin Fowler曾经说过持续集成并不能消除BUG,但是能容易的发现BUG,修复BUG,从而提升产品的质量。那么CI/CD给团队带来了哪些价值:
- 减少风险。CI保证开发人员提交的代码是安全可靠的。开发人员每次提交代码都会触发CI,从而会自动进行静态代码检查,单元测试。CD阶段接口测试,UI测试都是自动化进行。整个交付标准化,可重复并且可靠
- 快速发布。整个流程自动化发布,提升了效率,能够更快的迭代
- 整个流程可视化。通过CI/CD工具,整个流程可视化,我们可以清楚的看到哪个阶段失败
- 更好的团队协作方式。开发,QA以及运维紧密联系在一起,更加高效
参考资料
- https://www.mindtheproduct.com/2016/02/what-the-hell-are-ci-cd-and-devops-a-cheatsheet-for-the-rest-of-us/
- http://blog.crisp.se/2013/02/05/yassalsundman/continuous-delivery-vs-continuous-deployment
- https://zhuxingsheng.github.io/2017/09/16/comon-sense-thre-continuous-integration,-continuous-delivery,-continuous-deployment/