从0开始理解DevOps

news2024/10/6 4:09:03

       

目录

一、DevOps背景

二、DevOps介绍

        DevOps 组成

三、Jenkins

        Jenkins 工作流程

四、云原生与DevOps


        相信你一定听过 DevOps 这个词,那它到底是什么呢?为什么越来越多的互联网企业都在追随使用它?它与云原生有什么关系?本文将带你一起探讨一下。

一、DevOps背景

        公司的业务发展越来越多的依赖软件,而且这种依赖程度越来越重,这也是发展趋势。而软件的开发过程也进入到了敏捷开发,这些年对敏捷开发的要求也越来越高,新业务新功能层出不穷,这就要求能够进行快速试错,甚至一天内升级部署多次都是有可能的,显然传统的模式是难以支持的。

        软件开发最开始由两个团队组成:

  • 开发团队:从开始对接需求,设计系统架构及开发代码,提测,到后期不断地进行迭代更新
  • 运维团队:将开发团队的代码进行部署,然后又测试人员进行测试,最后进行生产环境部署,并希望系统稳定运行

        这两个团队之间经常存在沟通障碍和工作流程不连贯的问题,导致软件周期交付周期长、效率低下、且难以响应快速的时长变化和需求。尽管敏捷开发改善了开发流程,但运维团队往往未能跟上快速迭代的步伐。

        这时就需要一套开发团队和运维团队协同工作的一套软件,即 DevOps。

二、DevOps介绍

        随着技术的不断进步,出现了云计算、容器技术(Docker)、配置管理工具、持续集成和持续部署(CI/CD)工具、代码管理构建工具等技术,为自动化软件交付提供了技术支持,使得快速、频繁、可靠的部署成为可能。

        DevOps 组成

        DevOps(Development & Operations)是开发运维团队协同工作的一套软件,软件开发流程如下:

  1. PLAN:开发团队根据客户目标或产品经理要求指定合理的开发计划
  2. CODE:根据开发计划进行编码过程,这时需要将代码托管到代码管理工具中,如 Git
  3. BUILD:编码工作完成并提交到代码管理工具后,需要用代码构建工具进行构建并打包,代码构建工具常用的有 Maven、Gradle 等
  4. TEST:代码构建成功后需要测试根据测试用例进行测试,如果发现代码中的错误或bug,需要进行修改,并重新构建
  5. DEPLOY:测试团队对代码经过手动测试、自动化测试、压测等步骤后,认定代码已经具备部署条件,这时交由运维团队
  6. OPERATE:运维团队将项目部署到生产环境,这这个过程中会用到容器化技术 Docker、服务编排工具 Kubernetes 等
  7. MONITOR:项目部署上线后要对项目进行持续的监控
  8. 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 插件等。

  1. 开发团队开发完成后,将代码提交到 git 仓库,然后 Jenkins 就可以对提交的代码进行构建了。
  2. Jenkins 通过项目构建工具(如 Maven),对项目进行构建。
  3. 然后根据项目中 Dockerfile 制作相应的镜像
  4. 如果是测试环境,服务启动后测试人员就能进行测试了。测试通过后需要部署到生产环境,这时需要将镜像部署到 Kubernetes,然后进行相应的服务编排并运行相应的服务。
  5. 通知结果:Jenkins 将构建结果通知发送给相应人员

四、云原生与DevOps

        云原生是一种构建和运行应用程序的方法论,它充分利用了云计算的优势,旨在使应用具备弹性、可移植性和可扩展性。云原生的特点包括:

  1. 容器化:应用及其依赖被打包进轻量级容器中,如 Docker,实现标准化的部署和运行环境。
  2. 微服务架构:将应用拆分成一组小型、独立的服务,每个服务都可独立部署和扩展。
  3. 自动化管理:使用持续集成/持续部署(CI/CD)流水线自动化软件的构建、测试、部署过程。
  4. 服务网格:用于处理服务间通信的复杂性,包括服务发现、负载均衡、监控和安全。
  5. 声明式基础设施:使用如 Kubernetes YAML 文件来描述应用所需的资源和状态,而非命令式操作。
  6. 可观测性:集成监控、日志和追踪工具,确保应用的健康状态可被有效监测。

        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博客

     

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1829120.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

14.带basic认证的registry仓库

带basic认证的registry 安装httpd-tools工具,将账号密码重定向到指定路径下的文件 yum install httpd-tools -y mkdir /opt/registry-var/auth/ -p htpasswd -Bbn quyunlong 123456 >> /opt/registry-var/auth/htpasswd每次追加密码文件htpasswd&#xff…

ROS机器人小车建模仿真与SLAM

文章目录 一、URDF二、创建小车模型1.创建功能包2.导入依赖3.创建urdf,launch文件:4.可视化 三、添加雷达1.xacro文件2.集成和修改launch3.添加摄像头和雷达 三.GAZEBO仿真四、orbslam2kitti1.下载2.安装编译ORB_SLAM23.运行Kitee数据集 一、URDF ​ URDF&#xff…

Science:如何快速完成一篇研究性论文?

我是娜姐 迪娜学姐 ,一个SCI医学期刊编辑,探索用AI工具提效论文写作和发表。 完成一篇研究性论文,是将长时间积累的研究成果凝聚在几页纸中,对资深科学家而言也是一大挑战。作者们需要在充分论述科学问题和详细展示结果之间找到平…

实现贪吃蛇小游戏【简单版】

1. 贪吃蛇游戏设计与分析 1.1 地图 我们最终的贪吃蛇大纲要是这个样子,那我们的地图如何布置呢? 这里不得不讲⼀下控制台窗口的⼀些知识,如果想在控制台的窗口中指定位置输出信息,我们得知道该位置的坐标,所以首先介…

【YOLOv10轻量级涨点改进:block优化 | 华为诺亚2023极简的神经网络模型 VanillaNet】

本文属于原创独家改进:一种极简的神经网络模型VanillaNet,以极简主义的设计为理念,网络中仅仅包含最简单的卷积计算,去掉了残差和注意力模块 计算量参数量比较,8.4 GFLOPs降低至6.1 GFLOPs YOLOv10n summary: 385 layers, 2709380 parameters, 2709364 gradients, 8.4 GF…

基于C#开发web网页管理系统模板流程-参数传递

点击返回目录-> 基于C#开发web网页管理系统模板流程-总集篇-CSDN博客 前言 当用户长时间未在管理系统界面进行操作,或者用户密码进行了更改,显然用户必须重新登录以验证身份,如何实现这个功能呢? HTTP Cookie(也叫 …

【尚庭公寓SpringBoot + Vue 项目实战】房间管理(十二)

【尚庭公寓SpringBoot Vue 项目实战】房间管理(十二) 文章目录 【尚庭公寓SpringBoot Vue 项目实战】房间管理(十二)1、业务介绍2、逻辑模型介绍3、接口开发3.1、保存或更新房间信息3.2、根据条件分页查询详细信息3.3、根据id获…

缠论再研究1-顶底分型

由于现在不是全职写程序了,看起来不是那么辛苦,终于有点精力重新研究缠论了。 之前做过几个月期货,发现真是太难了,布鲁克斯的书写的好是好,终归还是太过复杂,一时半会吸收不了,加之我们程序员…

【招联消费金融股份】有限公司2024年5月19日【算法开发岗暑期实习】二面试经验分享

招联消费金融股份有限公司2024年5月18日面试经验分享 面试流程:30分钟 面试流程:30分钟 先自我介绍3分钟然后介绍论文和实习,细细问。问对招联了解多少?对实习地点怎么样?反问,正常聊天。 创作不易&#x…

110.平衡二叉树

给定一个二叉树,判断它是否是 平衡二叉树 题解:平衡二叉树 是指该树所有节点的左右子树的深度相差不超过 1。可以采用递归遍历每一个节点,得到其高度,在判断高度时不可避免的要用到其左右子树的高度,所以可以顺便判断出…

ElasticSearch地理空间数据了解

ElasticSearch地理空间数据了解 使用场景 Elasticsearch 的地理空间数据处理功能在现代社会中有着广泛的应用,以下是一些常见的使用场景和方向: 1. 位置搜索和导航 本地服务发现:应用程序可以使用 Elasticsearch 查找用户附近的餐馆、商店…

大数据入门实践一:mac安装Hadoop,Hbase,FLume

一、安装Hadoop 安装hadoop参考此文,关键点是安装JDK和Hadoop的配置,为避免引用文章变收费,我把关键信息摘录如下: jdk安装和配置就不说了(我本机安装了1.8/15/17/21,以17为主),hadoop安装过程…

基于 SSM 框架的二手书交易系统

基于 SSM 框架的二手书交易系统 一、项目介绍二、项目技术栈三、项目运行四、项目演示总结 大家好,这里是程序猿代码之路。在当今环保意识日益增强和资源节约型社会建设的背景下,二手交易作为一种节省资源和降低成本的消费方式越来越受到人们的欢迎。特别…

自定义MyBatis插件

插件原理回顾 在前面,我们通过 MyBatis插件机制介绍与原理 分析了 MyBatis 插件的基本原理,但是可能还只是理论上的分析,没有实战的锻炼可能理解的还是不够透彻。接下来,我们通过自定义插件实例来进一步深度理解 MyBatis 插件的插…

【gitcode】idea 在本地拉取和push本地代码到gitcode仓库

【首次使用】 1、idea 拉取代码,很容易这里就不记录了。 2、push代码时,总是弹窗登录输入在gitcode.com登录能成功。但是在idea 怎么都不成功。控制台提示 remote: HTTP Basic: Access denied fatal: Authentication failed for ******* 认证失败 3…

如何解决javadoc一直找不到路径的问题?

目录 一、什么是javadoc二、javadoc为什么会找不到路径三、如何解决javadoc一直找不到路径的问题 一、什么是javadoc Javadoc是一种用于生成Java源代码文档的工具,它可以帮助开发者生成易于阅读和理解的文档。Javadoc通过解析Java源代码中的注释,提取其…

Docker:在DockerHub上创建私有仓库

文章目录 Busybox创建仓库推送镜像到仓库 本篇开始要学习在DockerHub上搭建一个自己的私有仓库 Busybox Busybox是一个集成了三百多个最常用Linux命令和工具的软件,BusyBox包含了很多工具,这里拉取该镜像推送到仓库中: 安装 apt install …

Javaweb06-Jsp技术

Jsp技术 一.Jsp的运行原理 **概述:**JSP是Java服务器页面,既可以写静态页面代码,也可以写动态页面代码 **特点:**跨平台性,业务代码相分离,组件重用,预编译 运行原理: 客户端发生…

页面置换算法的模拟实现

一. 实验内容 1. 假设某一个进程&#xff0c;在运行过程中需要访问的内容依次在320个地址中。为了模拟产生320个地址的值。首先实现在main函数中调用下面的函数随机产生320个地址的地址序列。 #include<unistd.h> void randarray(int a[],int k) { int i; float s;…

使用自定义注解进行权限校验

一&#xff0c;前言 对于一些重复性的操作我们可以用提取为util的方式进行处理&#xff0c;但也可以更简便一些&#xff0c;比如自定义个注解进行。选择看这篇文章的小伙伴想必都对注解不陌生&#xff0c;但是可能对它的工作原理不太清楚。这里我们用注解实现对接口的权限校验…