17、DevOps持续集成、持续部署

17、DevOps持续集成、持续部署

1、DevOps是什么

DevOps(DevelopmentOperations的结合词)是一种软件开发和IT运维的方法论和文化,旨在通过改进开发团队和运维团队之间的协作,实现更快、更可靠的软件交付和运维。DevOps的核心目标是缩短软件开发周期、提高软件质量、加强团队之间的协作,以及增加对生产环境的可视性和控制。

  • DevOps 看作开发(软件工程)技术运营质量保障(QA)三者的交集。
  • 突出重视软件开发人员和运维人员的沟通合作,通过自动化流程来使得软件构建、测试、 发布更加快捷、频繁和可靠。
  • DevOps 希望做到的是软件产品交付过程中 IT 工具链的打通,使得各个团队减少时间损耗,更加高效地协同工作。专家们总结出了下面这个 DevOps 能力图,良好的闭环可以大大 增加整体的产出。

2、DevOps的一些关键原则和实践

  1. 自动化:自动化是DevOps的核心。自动化包括构建自动化、部署自动化、测试自动化以及监控和日志自动化。通过自动化重复性任务,可以减少错误并提高效率。
  2. 持续集成(CI):CI是指将开发团队的代码频繁集成到共享存储库中,然后自动进行构建和测试。这有助于及早发现和修复问题,并促进快速的迭代开发。
  3. 持续交付(CD):CD是CI的延伸,它将自动构建和测试与自动部署结合起来,以便在经过自动化测试后,能够将代码自动部署到生产环境或预生产环境中。
  4. 监控和反馈:DevOps强调实时监控应用程序性能和运行状况,并及时获取反馈。这有助于迅速识别和解决问题,确保应用程序的稳定性和可用性。
  5. 团队协作:DevOps鼓励开发人员、运维人员和其他相关团队之间的密切合作和沟通。这有助于消除信息孤岛,促进知识共享,并加强整个团队的责任感。
  6. 基础设施即代码(IaC):IaC是一种实践,通过编码方式管理基础设施配置,使其可以像应用程序代码一样进行版本控制和自动化管理。这有助于确保基础设施与应用程序的一致性。

DevOps的目标是通过自动化、协作和持续交付实现更快、更稳定和更可靠的软件交付流程。这不仅改善了开发和运维之间的关系,还有助于更好地满足业务需求,提供更好的用户体验。

3、CICD是什么

持续 集成 持续 部署

1、基本理念

1、持续集成(Continuous Integration)

持续集成是指软件个人研发的部分向软件整体部分交付,频繁进行集成以便更快地发现 其中的错误。"持续集成"源自于极限编程(XP),是 XP 最初的 12 种实践之一。

CI 需要具备这些:

  • 全面的自动化测试。这是实践持续集成&持续部署的基础,同时,选择合适的 自动化测试工具也极其重要;
  • 灵活的基础设施。容器,虚拟机的存在让开发人员和 QA 人员不必再大费周 折;
  • 版本控制工具。如 Git,CVS,SVN 等;
  • 自动化的构建和软件发布流程的工具,如 Jenkins,flow.ci
  • 反馈机制。如构建/测试的失败,可以快速地反馈到相关负责人,以尽快解决达到一个更稳定的版本。
3、持续交付(Continuous Delivery)

持续交付在持续集成的基础上,将集成后的代码部署到更贴近真实运行环境的「类生产环境」(production-like environments)中。持续交付优先于整个产品生命周期的软件部署,建立 在高水平自动化持续集成之上。

持续交付和持续集成的优点非常相似:

  • 快速发布。能够应对业务需求,并更快地实现软件价值。
  • 编码->测试->上线->交付的频繁迭代周期缩短,同时获得迅速反馈;
  • 高质量的软件发布标准。整个交付过程标准化、可重复、可靠,
  • 整个交付过程进度可视化,方便团队人员了解项目成熟度;
  • 更先进的团队协作方式。从需求分析、产品的用户体验到交互 设计、开发、测试、运维等角色密切协作,相比于传统的瀑布式软件团队,更少浪费。
3、持续部署(Continuous Deployment)

持续部署是指当交付的代码通过评审之后,自动部署到生产环境中。持续部署是持续交付的最高阶段。这意味着,所有通过了一系列的自动化测试的改动都将自动部署到生产环境。它也可以被称为"Continuous Release"。

"开发人员提交代码,持续集成服务器获取代码,执行单元测试,根据测试结果决定是否部署到预演环境,如果成功部署到预演环境,进行整体验收测试,如果测试通过,自动部署到产品环境,全程自动化高效运转。

持续部署主要好处是,可以相对独立地部署新的功能,并能快速地收集真实用户的反馈。

"You build it, you run it",这是 Amazon 一年可以完成 5000 万次部署, 平均每个工程师每天部署超过 50 次的核心秘籍。

5000/365 = 15 万次

开发人员代码敲完。可以release的时候,提交代码, 剩下的全部一站式自动搞定。

4、小结
名称 含义
持续集成 CI 开发人员频繁(一天多次)将代码集成到主干,系统自动进行编译、测试等检查。
持续交付 CD 在 CI 基础上,代码能随时准备好部署到生产环境,但部署仍由人工触发。
持续部署 CD 更进一步,代码通过所有测试后自动部署到生产环境,全流程无人值守。

📦 类比为"快递打包与投递"过程:

阶段 软件开发中的对应 快递流程中的类比说明
CI 持续集成 代码集成与测试 多个工人将自己的包裹送到仓库,自动打包、贴单、扫描、质检(自动构建+测试)
CD 持续交付 可部署版本产出 包裹打包完毕放在传送带尽头,等着快递员来人工确认、发货
CD 持续部署 自动上线 包裹自动出库、派件、送货上门,无需人工干预(自动部署到用户)

2、最佳实践

1、内循环与外循环
  • 内循环(开发要做的事情):

    • 编码、测试、运行、debug、提交
  • 代码推送到代码仓库(svn,git)【代码回滚】

  • 进行CI过程(持续集成),万物皆可容器化。打包成一个Docker镜像

  • 镜像推送到镜像仓库

  • 测试

  • 持续部署流程(CD),拿到之前的镜像,进行CD。怎么放到各种环境。uat、test、prod

  • 外循环

    • 运行时监控
    • 生产环境的管理
    • 监控
    • 线上反馈到开发
  • 来到内循环

2、实践流程

新功能,bug修复。

  • 创建分支来做这个事情(开发功能)

  • 提交分支的代码改变

  • 进入持续集成流程

    • 当前分支代码功能性自动化构建和测试
    • 自动工具推送这次提交
    • 自动化集成测试
    • 可以看到效果
    • 人工确认此次功能是否发布到生产环境
  • 代码合并。

  • 进入持续部署流程

    • 构建、测试、发布...
相关推荐
虚伪的空想家19 小时前
K8S部署的ELK分片问题解决,报错:unexpected error while indexing monitoring document
运维·elk·云原生·容器·kubernetes·报错·eck
心灵宝贝1 天前
CentOS 7 安装 net-tools.rpm 包步骤详解(附 rpm 命令和 yum 方法)附安装包
linux·运维·centos
1024find1 天前
Linux基线配置
linux·运维·服务器
江湖有缘1 天前
基于华为openEuler部署webmin服务器管理工具
运维·服务器·华为
wanhengidc1 天前
本机网速会影响到云手机的运行吗
运维·服务器·安全·游戏·智能手机
娶个名字趴1 天前
Docker(二)
运维·docker·容器
阳懿1 天前
windows系统电脑远程登录ubuntu系统电脑
linux·运维·ubuntu
“愿你如星辰如月”1 天前
Linux C缓冲区机制全解析
linux·运维·服务器·c语言·vscode
黄焖鸡能干四碗1 天前
企业信息化建设总体规划设计方案
大数据·运维·数据库·人工智能·web安全
云边有个稻草人1 天前
基于KingbaseES集群管理实战:从部署运维到高可用架构深度解析
运维·国产数据库·kingbasees部署工具