Devops理念基础(持续更新)

Software Development Life Cycle(SDLC)是组织和实施软件开发管理的框架,定义系统工程师和开发人员在软件开发和维护中的工作阶段,主要包括需求收集、可行性研究、设计、编码、测试、部署和维护等环节。

一、主要SDLC模型

  1. 瀑布模型(Waterfall)

    1. 开发过程线性,所有阶段界限分明且逐个完成,如同瀑布自上而下流动。

    2. 是软件开发史上第一个、最简单且优秀的SDLC方法之一。

    3. 适用场景:复杂领域项目(如飞机制造、医疗)、法规和要求相对稳定、需求明确、有严格截止日期和固定成本的项目。

    4. 缺点:不允许返回到以前的开发阶段纠正或实施更改,只能在下一个迭代中进行。

    5. 流程:System engineering → Analysis → Design → Code → Testing → Maintenance

  2. 迭代/增量模型(Iterative Development)

    1. 先以较低成本快速创建产品版本,再通过快速连续的迭代测试和增强。

    2. 每次迭代生成更新、更可靠的版本,需历经多次迭代至最终版本成型。

    3. 典型特征:可在未完全了解需求时启动开发。

    4. 适用场景:ERP系统等复杂项目,需求已明确定义、目标确定但未来可能有细微变化的项目。

    5. 流程:Initialization → Requirements → Planning → Design → Implementation → Verification → Evaluation → Deployment

  3. 敏捷模型(Agile)

    1. 结合增量和迭代方法,适应灵活的应用需求。

    2. 项目分成小的子部分,在迭代中交付,每次迭代结束提供版本供客户审查和反馈,测试信息可融入下一个版本。

    3. 流行实践方法:Scrum、SAFe、Extreme Programming(XP)、Kanban。

    4. 流程:Requirement Analysis → Design Document & Prototype → Development → Testing → If some errors are there, return to previous steps → Next Iteration

  4. DevOps模型

    1. 产生背景:传统SDLC中,产品设计、开发、测试、运维团队目标不同(测试人员关注找Bug、开发人员关注技术和高效开发功能、运维关心系统稳定),易产生矛盾、增加成本;竞争加剧下,持续交付成为大势所趋。

    2. 核心目标:将协同但目标不同的团队聚集,共同实现目标,推动标准化环境、降低新版本失败率、缩短交付时间、加快平均恢复时间。

    3. 好处:减少交付周期,更快创建新功能,推动创新,提升员工参与度和沟通,确保应用程序更安全稳定;通过CI/CD实现部署频率、交付周期等多方面改进;支持快速实验、原型设计和A/B测试;避免技术债务。

    4. 关键指标:平均投产时间(Mean-time to production)、平均提前时间(Average lead-time)、部署速度(Deployment speed)、部署频率(Deployment frequency)、生产失败率(Production failure rate)、平均恢复时间(Mean-time to recovery, MTTR)。

    5. 流程:PLAN → CODE → BUILD → TEST → RELEASE → DEPLOY → OPERATE → MONITOR

二、Devops概念

DevOps是一组过程、部署及开发系统的统称,用于促进开发(应用程序/软件工程)、技术运营和质量保障(QA)部门之间的沟通、协作与整合。 含义就是开发-运维一体化,能够理顺开发和运维之间相互配合关系的任何事物。

开发流程:

整体的软件开发流程包括:

  1. PLAN:开发团队根据客户的目标制定开发计划

  2. CODE:根据PLAN开始编码过程,需要将不同版本的代码存储在一个库中。

  3. BUILD:编码完成后,需要将代码构建并且运行。

  4. TEST:成功构建项目后,需要测试代码是否存在BUG或错误。等保测评2.0标准可用于生产应用。

  5. DEPLOY:代码经过手动测试和自动化测试后,认定代码已经准备好部署并且交给运维团队。

  6. OPERATE:运维团队将代码部署到生产环境中。可调用ansible、docker、kubernetes。

  7. MONITOR:项目部署上线后,需要持续的监控产品。Nagios、zabbix、Prometheus。

  8. INTEGRATE:然后将监控阶段收到的反馈发送回PLAN阶段,整体反复的流程就是DevOps的核心,即持续集成、持续部署

总的来说就是:

  1. Code阶段(编码):Git+GitLab git控制器(与docker的harbor仓库一样可设为公开和私有) 国内用getee。

  2. Build阶段(构建):java使用Maven或go语言Gradle(不同开发语言开发的代码使用的中间件不同)将依赖和源码包装到压缩包中。Jenkins集成工具。

  3. Operate(运行):Docker

  4. Integrate(集成):Jenkins

    • CI/CD(持续集成):操作Jenkins,编写对应脚本文件

    • Code review(代码质量检测):Jenkins集成Sonar Qube

    • 自定义镜像:Harbor

    • Jenkins流水线操作

    • WebHook:通知操作,如:钉钉机器人通知

  5. K8S编排:更加方便我们管理容器

三、DevOps生命周期

DevOps生命周期主要包括产品(策划、研发、运营、推出)、项目(立项、执行、完工),而敏捷、持续集成、持续部署、持续交付都是 DevOps 的一个局部的阶段。

四、DevOps三大原则

五、DevOps与CICD的联系与区别

(一)核心定义

  1. CICD:软件工程实践方法,包括持续集成(CI)、持续交付(CD)、持续部署(CD)三个典型阶段,通过自动化实现高频度向客户交付应用。

  2. DevOps:一种文化,容器、容器编排、微服务等技术使其落地;DevOps团队的最终目标通常是在开发环境中自动化CI/CD。

(二)CICD详细解析

  1. 核心概念

    1. 持续集成(CI):开发人员的自动化流程,实现开发工作流程自动化,包括代码提交、构建、单元测试、集成测试等。

    2. 持续交付:开发人员的更改自动进行错误测试并上传到存储库(如GitHub或Image Registry),由运维团队部署到生产环境;解决开发和运维沟通问题,减少部署工作量。

    3. 持续部署:自动将开发人员的更改从存储库发布到生产环境;以持续交付为前提,解决手动流程导致的交付速度慢、运维超负荷问题。

  2. CICD Pipeline

    1. 定义:为交付新版本软件必须执行的一系列步骤,是一套专注于改进软件交付的实践,加入监控和自动化。

    2. 核心价值:自动化(手动可执行但自动化是关键)。

    3. 典型阶段:

      • Build(构建):应用编译。

      • Test(测试):代码测试(如JUnit Tests、性能测试)。

      • Release(发布):将应用交付到存储库(如NPM Registry、Maven repository、Container Registry)。

      • Deploy(部署):将代码部署到生产环境(如Review App、生产环境部署)。

      • Validation和Compliance(验证与合规):镜像安全性扫描(如Clair)等。

    4. 云原生支持:传统CI/CD为虚拟机设计,云原生技术带来突破,如Tekton项目可构建Kubernetes风格的Pipeline。

  3. 简单工作流程

    1. Commit Change:开发人员提交代码至代码仓库。

    2. Build Binary:CI Server构建应用程序。

    3. Deploy UAT:部署到用户接受度测试(UAT)环境。

    4. Test UAT:在UAT环境完成测试。

    5. Deploy PROD:部署到生产(PROD)环境。

    6. Test PROD:在PROD环境完成测试。

相关推荐
apihz2 小时前
免费手机号归属地查询API接口详细教程
android·java·运维·服务器·开发语言
lvbinemail2 小时前
svn的web管理后台服务svnWebUI
运维·前端·svn·jar
宇钶宇夕2 小时前
跨协议冗余通信方案落地:EPN-330网关打通西门子S7-1517H与编码器的控制链路
运维·网络·自动化
txzz88882 小时前
CentOS-Stream-10 搭建FTP服务器之系统用户访问
linux·运维·服务器·centos·ftp服务器·ftp 系统用户访问
ℳ₯㎕ddzོꦿ࿐2 小时前
零基础教程:在 Linux 上通过 Docker 快速部署 Dify
linux·运维·docker·dify
学海_无涯_苦作舟2 小时前
RabbitMQ Java Client源码解析——ConnectionFactory和Connection
linux·运维·服务器
和光同尘20232 小时前
一文讲透CentOS下安装部署使用MYSQL
linux·运维·数据库·数据仓库·mysql·centos·database
FVV11232 小时前
Windows键盘鼠标自动化工具,免费永久使用
运维·自动化
胖咕噜的稞达鸭2 小时前
【Linux系统编程】解密环境变量与进程地址空间
linux·运维·chrome