CI/CD详细介绍
一个完整的系统所经历的大概过程:产品设计-> 开发人员开发代码 -> 测试人员测试功能 -> 运维人员发布上线。
一、集成(Integration)
在实际的软件开发中,常常会有如下两种场景:
-
现在有一个电商平台需要开发,由于电商平台模块众多,此时就需要不同的开发人员开发不同的模块,最后将所有人开发好的代码集成到一个系统中,集成完毕后需要对其进行部署上线。 -
随着时间的推移,该系统无论是bug修复、还是新功能开发,后续都需要对系统进行不断的更新迭代。
总的来说:集成就是所有的开发人员将自己开发的模块合并到一起构成一个完整的系统。
二、持续集成(Continuous Integration)
持续集成指的是频繁的将代码集成到主干(重复上述集成的工作),如下图:
开发人员提交了新代码之后,立刻自动的进行构建,执行单元测试(可以通过 Jenkins 完成),开发人员只需要提交代码,就可以得到这次集成的结果,根据结果,可以确定新代码和原有代码能否正确地集成在一起。
使用持续集成的好处:
-
快速发现错误,每完成一点更新,就集成到主干,可以快速发现错误,定位错误也比较容易。 -
节省人力成本,通过 Jenkins 自动化构建。 -
加快软件开发进度。 -
实时交付。
持续集成的核心:
代码集成到主干之前,先进行自动化测试。只要有一个测试用例失败,就不能集成,当然持续集成并不能完全的消除Bug,而是让它们非常容易发现和改正。
三、持续交付(Continuous Delivery)
持续交付指的是在持续集成的基础之上,将代码自动部署到预生产环境(Staging),如下图:
Staging 环境可以理解为线上环境的镜像(最大限度来模拟线上的环境),测试人员、PM在预生产环境(Staging)上对最终要部署的项目做最后一轮验证。
如果预生产环境验证通过,需要手动部署到线上(生产)环境。
四、持续部署(Continuous Deployment)
持续部署是持续交付的下一步,指的是将代码自动部署到生产环境,如下图:
持续交付和持续部署的区别就是最终部署到生产环境的过程是否自动。
开发只需要提交代码,其余什么都不用做,如果代码通过测试,可以全自动的部署到生产环境。
|