Software Development Life Cycle(SDLC)是组织和实施软件开发管理的框架,定义系统工程师和开发人员在软件开发和维护中的工作阶段,主要包括需求收集、可行性研究、设计、编码、测试、部署和维护等环节。
一、主要SDLC模型
-
瀑布模型(Waterfall)
-
开发过程线性,所有阶段界限分明且逐个完成,如同瀑布自上而下流动。
-
是软件开发史上第一个、最简单且优秀的SDLC方法之一。
-
适用场景:复杂领域项目(如飞机制造、医疗)、法规和要求相对稳定、需求明确、有严格截止日期和固定成本的项目。
-
缺点:不允许返回到以前的开发阶段纠正或实施更改,只能在下一个迭代中进行。
-
流程:System engineering → Analysis → Design → Code → Testing → Maintenance
-
-
迭代/增量模型(Iterative Development)
-
先以较低成本快速创建产品版本,再通过快速连续的迭代测试和增强。
-
每次迭代生成更新、更可靠的版本,需历经多次迭代至最终版本成型。
-
典型特征:可在未完全了解需求时启动开发。
-
适用场景:ERP系统等复杂项目,需求已明确定义、目标确定但未来可能有细微变化的项目。
-
流程:Initialization → Requirements → Planning → Design → Implementation → Verification → Evaluation → Deployment
-
-
敏捷模型(Agile)
-
结合增量和迭代方法,适应灵活的应用需求。
-
项目分成小的子部分,在迭代中交付,每次迭代结束提供版本供客户审查和反馈,测试信息可融入下一个版本。
-
流行实践方法:Scrum、SAFe、Extreme Programming(XP)、Kanban。
-
流程:Requirement Analysis → Design Document & Prototype → Development → Testing → If some errors are there, return to previous steps → Next Iteration
-
-
DevOps模型
-
产生背景:传统SDLC中,产品设计、开发、测试、运维团队目标不同(测试人员关注找Bug、开发人员关注技术和高效开发功能、运维关心系统稳定),易产生矛盾、增加成本;竞争加剧下,持续交付成为大势所趋。
-
核心目标:将协同但目标不同的团队聚集,共同实现目标,推动标准化环境、降低新版本失败率、缩短交付时间、加快平均恢复时间。
-
好处:减少交付周期,更快创建新功能,推动创新,提升员工参与度和沟通,确保应用程序更安全稳定;通过CI/CD实现部署频率、交付周期等多方面改进;支持快速实验、原型设计和A/B测试;避免技术债务。
-
关键指标:平均投产时间(Mean-time to production)、平均提前时间(Average lead-time)、部署速度(Deployment speed)、部署频率(Deployment frequency)、生产失败率(Production failure rate)、平均恢复时间(Mean-time to recovery, MTTR)。
-
流程:PLAN → CODE → BUILD → TEST → RELEASE → DEPLOY → OPERATE → MONITOR
-
二、Devops概念
DevOps是一组过程、部署及开发系统的统称,用于促进开发(应用程序/软件工程)、技术运营和质量保障(QA)部门之间的沟通、协作与整合。 含义就是开发-运维一体化,能够理顺开发和运维之间相互配合关系的任何事物。
开发流程:
整体的软件开发流程包括:
-
PLAN:开发团队根据客户的目标制定开发计划
-
CODE:根据PLAN开始编码过程,需要将不同版本的代码存储在一个库中。
-
BUILD:编码完成后,需要将代码构建并且运行。
-
TEST:成功构建项目后,需要测试代码是否存在BUG或错误。等保测评2.0标准可用于生产应用。
-
DEPLOY:代码经过手动测试和自动化测试后,认定代码已经准备好部署并且交给运维团队。
-
OPERATE:运维团队将代码部署到生产环境中。可调用ansible、docker、kubernetes。
-
MONITOR:项目部署上线后,需要持续的监控产品。Nagios、zabbix、Prometheus。
-
INTEGRATE:然后将监控阶段收到的反馈发送回PLAN阶段,整体反复的流程就是DevOps的核心,即持续集成、持续部署。
总的来说就是:
-
Code阶段(编码):Git+GitLab git控制器(与docker的harbor仓库一样可设为公开和私有) 国内用getee。
-
Build阶段(构建):java使用Maven或go语言Gradle(不同开发语言开发的代码使用的中间件不同)将依赖和源码包装到压缩包中。Jenkins集成工具。
-
Operate(运行):Docker
-
Integrate(集成):Jenkins
-
CI/CD(持续集成):操作Jenkins,编写对应脚本文件
-
Code review(代码质量检测):Jenkins集成Sonar Qube
-
自定义镜像:Harbor
-
Jenkins流水线操作
-
WebHook:通知操作,如:钉钉机器人通知
-
-
K8S编排:更加方便我们管理容器
三、DevOps生命周期
DevOps生命周期主要包括产品(策划、研发、运营、推出)、项目(立项、执行、完工),而敏捷、持续集成、持续部署、持续交付都是 DevOps 的一个局部的阶段。
四、DevOps三大原则

五、DevOps与CICD的联系与区别
(一)核心定义
-
CICD:软件工程实践方法,包括持续集成(CI)、持续交付(CD)、持续部署(CD)三个典型阶段,通过自动化实现高频度向客户交付应用。
-
DevOps:一种文化,容器、容器编排、微服务等技术使其落地;DevOps团队的最终目标通常是在开发环境中自动化CI/CD。
(二)CICD详细解析
-
核心概念
-
持续集成(CI):开发人员的自动化流程,实现开发工作流程自动化,包括代码提交、构建、单元测试、集成测试等。
-
持续交付:开发人员的更改自动进行错误测试并上传到存储库(如GitHub或Image Registry),由运维团队部署到生产环境;解决开发和运维沟通问题,减少部署工作量。
-
持续部署:自动将开发人员的更改从存储库发布到生产环境;以持续交付为前提,解决手动流程导致的交付速度慢、运维超负荷问题。
-
-
CICD Pipeline
-
定义:为交付新版本软件必须执行的一系列步骤,是一套专注于改进软件交付的实践,加入监控和自动化。
-
核心价值:自动化(手动可执行但自动化是关键)。
-
典型阶段:
-
Build(构建):应用编译。
-
Test(测试):代码测试(如JUnit Tests、性能测试)。
-
Release(发布):将应用交付到存储库(如NPM Registry、Maven repository、Container Registry)。
-
Deploy(部署):将代码部署到生产环境(如Review App、生产环境部署)。
-
Validation和Compliance(验证与合规):镜像安全性扫描(如Clair)等。
-
-
云原生支持:传统CI/CD为虚拟机设计,云原生技术带来突破,如Tekton项目可构建Kubernetes风格的Pipeline。
-
-
简单工作流程
-
Commit Change:开发人员提交代码至代码仓库。
-
Build Binary:CI Server构建应用程序。
-
Deploy UAT:部署到用户接受度测试(UAT)环境。
-
Test UAT:在UAT环境完成测试。
-
Deploy PROD:部署到生产(PROD)环境。
-
Test PROD:在PROD环境完成测试。
-