作者|徐进茂(罗离)JAVA开发工程师
<>强导读强>:近年来,Serverless一词越来越热,它已经逐渐成为了一种新型的软件设计架构。和DevOps概念提倡的是通过一系列工具和自动化的技术来降低运维的难度,促进研发运维一体化不同,Serverless更像是一种等待,即通过“不用做”的方式来解决”如何更高效做”的问题。
引用>DevOps概述
DevOps是一组用于促进开发和运维人员之间协作的过程,方法和系统的统称。
DevOps提倡通过一系列的技术和工具降低开发和运维人员之间的隔阂,实现从开发到最终部署的全流程自动化,从而达到开发运维一体化。通过将DevOps的理念引入到整个系统的开发过程中,能够显著提升软件的开发效率,缩短软件交付的周期,更加适应当今快速发展的互联网时代。
说到DevOps,就必然会提到持续集成。持续集成指的是在软件开发过程中,软件开发人员持续不断地将开发出来的代码和其他的开发人员的代码进行合,并每次合并后自动地进行编译,构建,并运行自动化测试进行验证,而不是等到最后各自开发完成后才合并在一起。
持续集成能从根本上提高一个团队的软件开发效率。在软件开发过程中引入持续集成,可以帮助团队及时的发现系统中的问题,并快速做出修复,不仅可以缩短软件开发的时间,而且可以交付更具质量的系统。
基于码头工人实现一个DevOps开发环境
一个DevOps开发环境需要满足以下8点需求。
<李>
<强>环境一致性强>:在本地开发出来的功能,无论在什么环境下部署都应该能得到一致的结果,
李> <李><强>代码自动检查强>:为了尽早发现问题,每一次代码提交后,系统都应该自动对代码进行检查,及早发现潜在的问题,并运行自动化测试。
李> <李><>强持续集成强>:每次代码提交后系统可以自动进行代码的编译和打包,无需运维人员手动进行;
李> <李><>强持续部署强>:代码集成完毕后,系统可以自动将运行环境中的旧版本应用更新成新版本的应用并且整个过程中不会让系统不可用;
李> <李><>强持续反馈强>:在代码自动检查,持续集成,持续部署的过程中,一旦出现问题,要能及时将问题反馈给开发人员以及运维人员。开发和运维人员收到反馈后对问题及时进行修复,
李> <李><强>快速回滚强>:当发现本次部署的版本出现问题时,系统应能快速回退到上一个可用版本;
李> <李><强>弹性伸缩强>:当某个服务访问量增大时,系统应可以对这个服务快速进行扩容,保证用户的访问。当访问量回归正常时,系统能将扩容的资源释放回去,实现根据访问情况对系统进行弹性伸缩;
李> <李> <>强可视化运维强>:提供可视化的页面,可实时监控应用,集群,硬件的各种状态。李>为了满足以上8点要求,设计出的DevOps开发环境如下图所示。
整个环境主要由6部分组成:
<李>代码仓库Gitlab李> <李>容器技术码头工人李> <李>持续集成工具詹金斯李> <李>代码质量检测平台SonarQube李> <李>镜像仓库港李> <李>容器集群管理系统Kubernetes李>
整个环境的运行流程主要分为以下6步:
<李>
开发人员在本地开发并验证好功能后,将代码提交到代码仓库;
李> <李>通过事先配置好的Webhook通知方式,当开发人员提交完代码后,部署在云端的持续集成工具詹金斯会实时感知,并从代码仓库中获取最新的代码;
李> <李>获取到最新代码后,詹金斯会启动测试平台SonarQube对最新的代码进行代码检查以及执行单元测试,执行完成后在SonarQube平台上生成测试报告。如果测试没通过,则以邮件的方式通知研发人员进行修改,终止整个流程。若测试通过,将结果反馈给詹金斯并进行下一步;
李> <李>代码检查以及单元测试通过后,詹金斯会将代码发送到持续集成服务器中,在服务器上对代码进行编译,构建然后打包成能在容器环境上运行的镜像文件。如果中间有步骤出现问题,则通过邮件的方式通知开发人员和运维人员进行处理,并终止整个流程;
从DevOps到Serverless:通过“不用做”的方式解决”如何更高效做”的问题