目录
一、DevOps背景
二、DevOps介绍
DevOps 组成
三、Jenkins
Jenkins 工作流程
四、云原生与DevOps
相信你一定听过 DevOps 这个词,那它到底是什么呢?为什么越来越多的互联网企业都在追随使用它?它与云原生有什么关系?本文将带你一起探讨一下。
一、DevOps背景
公司的业务发展越来越多的依赖软件,而且这种依赖程度越来越重,这也是发展趋势。而软件的开发过程也进入到了敏捷开发,这些年对敏捷开发的要求也越来越高,新业务新功能层出不穷,这就要求能够进行快速试错,甚至一天内升级部署多次都是有可能的,显然传统的模式是难以支持的。
软件开发最开始由两个团队组成:
- 开发团队:从开始对接需求,设计系统架构及开发代码,提测,到后期不断地进行迭代更新
- 运维团队:将开发团队的代码进行部署,然后又测试人员进行测试,最后进行生产环境部署,并希望系统稳定运行
这两个团队之间经常存在沟通障碍和工作流程不连贯的问题,导致软件周期交付周期长、效率低下、且难以响应快速的时长变化和需求。尽管敏捷开发改善了开发流程,但运维团队往往未能跟上快速迭代的步伐。
这时就需要一套开发团队和运维团队协同工作的一套软件,即 DevOps。
二、DevOps介绍
随着技术的不断进步,出现了云计算、容器技术(Docker)、配置管理工具、持续集成和持续部署(CI/CD)工具、代码管理构建工具等技术,为自动化软件交付提供了技术支持,使得快速、频繁、可靠的部署成为可能。
DevOps 组成
DevOps(Development & Operations)是开发运维团队协同工作的一套软件,软件开发流程如下:
- PLAN:开发团队根据客户目标或产品经理要求指定合理的开发计划
- CODE:根据开发计划进行编码过程,这时需要将代码托管到代码管理工具中,如 Git
- BUILD:编码工作完成并提交到代码管理工具后,需要用代码构建工具进行构建并打包,代码构建工具常用的有 Maven、Gradle 等
- TEST:代码构建成功后需要测试根据测试用例进行测试,如果发现代码中的错误或bug,需要进行修改,并重新构建
- DEPLOY:测试团队对代码经过手动测试、自动化测试、压测等步骤后,认定代码已经具备部署条件,这时交由运维团队
- OPERATE:运维团队将项目部署到生产环境,这这个过程中会用到容器化技术 Docker、服务编排工具 Kubernetes 等
- MONITOR:项目部署上线后要对项目进行持续的监控
- INTEGRATE:将监控阶段收集到的信息反馈开发团队,这时开发团队也会收到产品经理关于新功能的迭代,这时会重新进行 PLAN 计划,然后就是循环整个过程
总体来说,DevOps 强调高效的组织团队之间如何通过自动化工具协作和沟通来完成生命周期,从而更快、更频繁的交付更稳定的软件。
三、Jenkins
上图中还涉及到一个核心的环节,那就是持续集成与交付(CI/CD),通常使用 Jenkins 进行CI/CD。
Jenkins 是基于Java开发的开源的持续集成的工具,Jenkins 配合gitlab、 Docker、K8s作为实现DevOps的核心工具。Jenkins最强大的地方在于其插件,Jenkins官方提供了大量插件来自动化CI/CD过程中各种琐碎功能。
Jenkins 的主要功能如下:
- 自动化构建和测试:Jenkins 可以自动监听代码库的变化,一旦检测到代码提交就会自动触发构建过程,执行编译、打包等操作,并运行单元测试、集成测试等,确保每次代码提交的质量。
- 持续集成:支持开发团队频繁的将代码合并到主分支,通过快速反馈机制发现并修复集成错误,加速软件开发流程,减少人工干预,提高开发效率。
- 持续交付与部署:Jenkins 支持将通过测试的软件包自动部署到测试环境乃至生产环境,实现从代码提交到产品发布的自动化流程,缩短软件交付周期。
- 插件支持:Jenkins 拥有庞大的插件体系,支持各种版本的系统、构建工具(如 Maven、Gradle)、测试框架、容器技术(Docker)、云服务等,极大的扩展了其他功能。
- 可视化和报告:提供丰富的构建结果可视化界面,包括构建趋势图、成功率统计等,帮助团队监控构建状态和项目健康度。
那什么是 CI/CD 呢?
CI:CI 过程即通过 Jenkins 将代码拉取、构建、制作镜像,然后交给测试人员进行测试,持续集成就是让软件代码可以持续的集成到主干、并自动构建和测试。
CD:通过 Jenkins 将打好标签的发现版代码拉取、构建、制作镜像 ,然后交给运维人员部署。持续交付指的是让经过持续集成的代码可以进行手动部署,持续部署指的是让可以持续交付的代码随时随地的自动化部署。
Jenkins 工作流程
Jenkins 工作流程如下图
下面详细介绍下这个工作流程,关于 Jenkins 的安装就不过多介绍了,按照教程一步步安装即可,安装好 Jenkins 后需要安装相应的插件,如 git 插件、Maven 插件、Docker 插件、kubernetes 插件等。
- 开发团队开发完成后,将代码提交到 git 仓库,然后 Jenkins 就可以对提交的代码进行构建了。
- Jenkins 通过项目构建工具(如 Maven),对项目进行构建。
- 然后根据项目中 Dockerfile 制作相应的镜像
- 如果是测试环境,服务启动后测试人员就能进行测试了。测试通过后需要部署到生产环境,这时需要将镜像部署到 Kubernetes,然后进行相应的服务编排并运行相应的服务。
- 通知结果:Jenkins 将构建结果通知发送给相应人员
四、云原生与DevOps
云原生是一种构建和运行应用程序的方法论,它充分利用了云计算的优势,旨在使应用具备弹性、可移植性和可扩展性。云原生的特点包括:
- 容器化:应用及其依赖被打包进轻量级容器中,如 Docker,实现标准化的部署和运行环境。
- 微服务架构:将应用拆分成一组小型、独立的服务,每个服务都可独立部署和扩展。
- 自动化管理:使用持续集成/持续部署(CI/CD)流水线自动化软件的构建、测试、部署过程。
- 服务网格:用于处理服务间通信的复杂性,包括服务发现、负载均衡、监控和安全。
- 声明式基础设施:使用如 Kubernetes YAML 文件来描述应用所需的资源和状态,而非命令式操作。
- 可观测性:集成监控、日志和追踪工具,确保应用的健康状态可被有效监测。
DevOps是一种文化和实践,旨在促进开发(Development)和运维(Operations)团队之间的紧密合作,通过自动化工具链实现软件的快速、频繁且可靠的交付。
云原生为 DevOps 实践提供了理想的基础设施和技术支撑,使得 DevOps 理念得以充分实施。云原生技术如容器编排(Kubernetes)、微服务架构和自动化工具,使得 DevOps 的持续交付、基础设施即代码(IaC)等实践更加高效、灵活。同时,DevOps 文化强调的团队合作、快速反馈和持续改进,也是云原生应用能够快速迭代、持续优化的关键所在。两者结合,不仅加速了软件的开发周期,也提升了应用的稳定性和可维护性,是现代软件工程的最佳实践之一。
往期经典推荐:
从0开始理解云原生架构-CSDN博客
Kubernetes: 从零开始理解K8s架构-CSDN博客
云原生基石:解码Docker镜像分层-CSDN博客
Sentinel与Nacos强强联合,构建微服务稳定性基石的重要实践_nacos和sentinel的关系-CSDN博客
Kafka VS RabbitMQ,架构师教你如何选择_rabbitmq和kafka选型-CSDN博客