架构设计系列(二):CI/CD

一、概述

CI/CD 是 持续集成(Continuous Integration) 和 持续交付/持续部署(Continuous Delivery/Continuous Deployment) 的缩写,是现代软件开发中的一套核心实践和工具链,旨在提高软件交付的效率、质量和可靠性。
在这里插入图片描述

二、CICD 在软件开发周期的应用

在软件开发周期中包含着几个关键节点如:编码、测试、部署及维护。CI/CD通过自动化工具和流程,将 软件开发周期 的各个阶段紧密集成,从而实现更快、更可靠的软件发布。

当开发人员提交代码至代码仓库的时候,就会触发自动构建和测试流程,运行端到端的测试用例去验证可执行代码。如果测试通过则将自动部署至对应的环境,如果发现bug则将对应代码回退并告知开发修复bug。CICD 帮助团队实现快速、可靠的软件交付。

2.1 软件开发生命周期(SDLC)

SDLC 是软件开发从开始到结束的完整过程,通常包括以下几个关键阶段:

  • 开发(Development):
    开发人员编写代码,实现功能需求。
    代码提交到版本控制系统(如 Git)。
  • 测试(Testing):
    对代码进行各种测试,包括单元测试、集成测试、端到端测试等。
    确保代码质量并发现潜在问题。
  • 部署(Deployment):
    将测试通过的代码部署到生产环境或预发布环境(如 staging)。
  • 维护(Maintenance):
    监控生产环境,修复问题,优化性能,并根据需求更新功能。

2.2 CI/CD 如何自动化 SDLC

CI/CD 通过自动化工具和流程,将 SDLC 的各个阶段紧密集成,从而实现更快、更可靠的软件发布。以下是 CI/CD 在 SDLC 中的具体作用:

  • 持续集成(CI)
    • 触发条件:
      当代码被推送到 Git 仓库时,CI 工具(如 Jenkins、GitLab CI)会自动触发构建和测试流程。
    • 构建与测试:
      代码被拉取并编译(如果需要)。
      运行单元测试、集成测试等,验证代码的正确性。
    • 快速反馈:
      如果测试通过,代码被认为是可用的。
      如果测试失败,开发人员会立即收到通知,并需要修复问题。
  • 持续交付/持续部署(CD)
    • 测试通过后:
      代码可以自动部署到预发布环境(staging)或生产环境(production)。
      在持续交付中,部署到生产环境需要人工审批。
      在持续部署中,部署到生产环境是自动化的,无需人工干预。
    • 端到端测试(E2E):
      在部署前或部署后,运行端到端测试,验证整个系统的功能是否正常。
    • 问题处理:
      如果在测试或部署过程中发现问题,代码会被退回开发阶段进行修复。

三、CI与CD的区别

3.1 持续集成(CI,Continuous Integration)

CI 是一种开发实践,旨在通过频繁地将代码变更集成到共享的主干分支(如 mainmaster 分支),并自动运行构建和测试,来快速发现和修复集成问题。其主要的功能职责有:

  • 自动化构建:每次代码提交后,自动拉取代码并编译(如果需要)。
  • 自动化测试:运行单元测试、集成测试等,验证代码的正确性。
  • 快速反馈:如果测试失败,开发人员会立即收到通知,并需要修复问题。

CI的工具主要有Jenkins、GitLab CI、CircleCI、Travis CI 等。主要用于开发阶段,用于确保代码变更不会破坏现有功能。适合需要频繁集成代码的团队。

3.2 持续交付(CD,Continuous Delivery)

CD 是 CI 的延伸,专注于自动化发布流程,确保软件可以随时可靠地部署到生产环境。它通过自动化工作流,将代码变更从开发环境推送到生产环境。其主要功能包括:

  • 自动化部署:将测试通过的代码自动部署到预发布环境(如 staging)。
  • 人工审批:在部署到生产环境之前,通常需要人工确认。
  • 自动化测试:除了 CI 中的测试外,还可能包括用户验收测试(UAT)和性能测试。

与 CI 工具类似,通常结合部署工具(如 Kubernetes、Ansible)。它的作用是在发布阶段确保代码变更可以安全地部署到生产环境。适合需要频繁发布但需要人工控制的团队。

3.3. CI 和 CD 的区别
特性持续集成(CI)持续交付(CD)持续部署(CD)
核心目标尽早发现集成问题,确保代码质量。确保软件可以随时可靠地发布。完全自动化地将代码变更部署到生产环境。
自动化范围构建和测试。构建、测试和部署到预发布环境。构建、测试和部署到生产环境。
人工干预无需人工干预。部署到生产环境前需要人工审批。无需人工干预。
适用阶段开发阶段。发布阶段。发布阶段。
工具示例Jenkins、GitLab CI、CircleCI。Jenkins、GitLab CI、Kubernetes。Jenkins、GitLab CI、Kubernetes。

3.4. CI 和 CD 的关系

  • CI 是 CD 的基础:持续集成确保代码变更的质量,持续交付和持续部署在此基础上实现自动化发布。
  • CI + CD 的完整流程
  1. 开发人员提交代码 → 2. CI 工具自动构建和测试 → 3. 测试通过后,CD 工具将代码部署到预发布环境 → 4. 人工审批后(持续交付)或自动(持续部署)部署到生产环境。

四、Netflix 的工程实践 (CI/CD Pipeline)

下图涵盖了Netflix开发团队从计划到监控的完整开发流程
在这里插入图片描述

  • 计划(Planning)
    开发团队通过 JIRA 创建任务、分配工作并跟踪进度。
    在 Confluence 中记录设计文档、技术规范和会议记录。
  • 编码(Coding)
    Java是 后端服务的主要编程语言,其稳定性和生态系统适合 Netflix 的大规模分布式系统。当然根据具体需求,可能使用其他语言、来处理特定任务。
  • 构建(Build)
    Gradle是主要的构建工具,用于编译代码、管理依赖和打包应用。Netflix 开发了自定义的 Gradle 插件,以支持特定的构建需求。
  • 打包(Packaging)
    将应用程序和依赖打包成 Amazon Machine Image (AMI),用于在 AWS 上部署。
  • 测试(Testing)
    Netflix 强调通过混沌工具(如 Chaos Monkey)主动引入故障,测试系统的弹性和可靠性。
  • 部署(Deployment)
    Netflix 自建的持续交付平台,支持金丝雀发布(Canary Release)等高级部署策略。
  • 监控(Monitoring)
    Netflix 使用 Atlas监控系统,集中收集和展示各项指标(如 CPU 使用率、请求延迟)。Kayenta用于检测异常,支持金丝雀分析和自动回滚。
  • 事件处理(Incident Report)
    PagerDuty用于事件调度和处理,根据优先级通知相关人员。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Windows 11 搭建私有知识库(docker、dify、deepseek、ollama)

一、操作系统信息 版本 Windows 11 家庭中文版 版本号 23H2 安装日期 ‎2023/‎8/‎21 操作系统版本 22631.4460二、搭建思路 ollama拉取deepseek、bge-m3模型docker拉取dify的镜像dify链接ollama使用模型,并上传文件搭建知识库,创建应用 三、搭建步骤…

本地部署DeepSeek摆脱服务器繁忙

由于图片和格式解析问题,可前往 阅读原文 最近DeepSeek简直太火了,频频霸榜热搜打破春节的平静,大模型直接开源让全球科技圈都为之震撼!再次证明了中国AI的换道超车与崛起 DeepSeek已经成了全民ai,使用量也迅速上去了…

‌CBA认证‌(业务架构师认证)简介---适用人群、考试内容与形式、含金量与职业前景,以及‌CBA、TOGAF认证对比表格

‌CBA认证‌,即业务架构师认证(Certified Business Architect,CBA),是由业务架构师协会(Business Architecture Institute)推出的一项国际认证计划。该认证旨在评估和认证业务架构师的专业能力和…

保姆级GitHub大文件(100mb-2gb)上传教程

GLF(Git Large File Storage)安装使用 使用GitHub desktop上传大于100mb的文件时报错 The following files are over 100MB. lf you commit these files, you will no longer beable to push this repository to GitHub.com.term.rarWe recommend you a…

使用 Visual Studio Code (VS Code) 开发 Python 图形界面程序

安装Python、VS Code Documentation for Visual Studio Code Python Releases for Windows | Python.org 更新pip >python.exe -m pip install --upgrade pip Requirement already satisfied: pip in c:\users\xxx\appdata\local\programs\python\python312\lib\site-pa…

Python的那些事第二十一篇:Python Web开发的“秘密武器”Flask

基于 Flask 框架的 Python Web 开发研究 摘要 在 Web 开发的江湖里,Python 是一位武林高手,而 Flask 则是它手中那把小巧却锋利的匕首。本文以 Flask 框架为核心,深入探讨了它在 Python Web 开发中的应用。通过幽默风趣的笔触,结合实例和表格,分析了 Flask 的特性、优势以…

Qt开发①Qt的概念+发展+优点+应用+使用

目录 1. Qt的概念和发展 1.1 Qt的概念 1.2 Qt 的发展史: 1.3 Qt 的版本 2. Qt 的优点和应用 2.1 Qt 的优点: 2.2 Qt 的应用场景 2.3 Qt 的应用案例 3. 搭建 Qt 开发环境 3.1 Qt 的开发工具 3.2 Qt SDK 的下载和安装 3.3 Qt 环境变量配置和使…

【第4章:循环神经网络(RNN)与长短时记忆网络(LSTM)— 4.3 RNN与LSTM在自然语言处理中的应用案例】

咱今天来聊聊在人工智能领域里,特别重要的两个神经网络:循环神经网络(RNN)和长短时记忆网络(LSTM),主要讲讲它们在自然语言处理里的应用。你想想,平常咱们用手机和别人聊天、看新闻、听语音助手说话,背后说不定就有 RNN 和 LSTM 在帮忙呢! 二、RNN 是什么? (一)…

DeepSeek应用——与PyCharm的配套使用

目录 一、配置方法 二、使用方法 三、注意事项 1、插件市场无continue插件 2、无结果返回,且在本地模型报错 记录自己学习应用DeepSeek的过程,使用的是自己电脑本地部署的私有化蒸馏模型...... (举一反三,这个不单单是可以用…

国自然地区基金|影像组学联合病理组学预测进展期胃癌术后预后的研究|基金申请·25-02-13

小罗碎碎念 今天和大家分享一个国自然地区科学项目,执行年限为2020.01~2023.12,直接费用为34万元。 胃癌在我国发病形势严峻,现有TNM分期预后评估存在局限,难以满足精准医疗需求。本项目运用“医工结合,学科…

【Java集合一】集合概述

一、集合简介 Java 集合框架(Collection Framework)是 Java 提供的一组用于存储和操作对象的类和接口集合。这些集合类提供了不同的数据结构,使得数据的管理和操作更加方便和高效。 Java 集合框架提供了各种类型的数据结构,如列…

k8s集群搭建参考(by lqw)

文章目录 声明配置yum源安装docker安装 kubeadm,kubelet 和 kubectl部署主节点其他节点加入集群安装网络插件 声明 由于看了几个k8s的教程,都存在各种问题,自己搭建的时候,踩了不少坑,最后还是靠百度csdnchatGPT才搭建…

MySQL 插入替换语句(replace into statement)

我们日常使用 insert into 语句向表中插入数据时,一定遇到过主键或唯一索引冲突的情况,MySQL的反应是报错并停止执行后续的语句,而replace into语句可以实现强制插入。 文章目录 一、replace into 语句简介1.1 基本用法1.2 使用set语句 二、注…

日语发音的节拍

短音 每个假名(包括清音、浊音、半浊音)都占 1 拍。 长音 长音占 2 拍,发音时间比短音长 不同母音的长音形式不同(あ段あ,い段い,う段う,え段い/え,お段う/お) 促音 …

[AI]从零开始的llama.cpp部署与DeepSeek格式转换、量化、运行教程

一、前言 在上一次的DeepSeek的部署教程中,我们使用Ollama与LM Studio很轻松的部署了DeepSeek并且也完成了相关API的调用,如果还有不会的小伙伴请看下面的教程: DeepSeek本地部署:[AI]从零开始的DeepSeek本地部署及本地API调用教…

基于SSM+uniapp的数学辅导小程序+LW示例参考

1.项目介绍 系统角色:管理员、普通用户功能模块:用户管理、学习中心、知识分类管理、学习周报管理、口算练习管理、试题管理、考试管理、错题本等技术选型:SSM,Vue(后端管理web),uniapp等测试环…

解决DeepSeek服务器繁忙问题

目录 解决DeepSeek服务器繁忙问题 一、用户端即时优化方案 二、高级技术方案 三、替代方案与平替工具(最推荐简单好用) 四、系统层建议与官方动态 用加速器本地部署DeepSeek 使用加速器本地部署DeepSeek的完整指南 一、核心原理与工具选择 二、…

B+Tree在mysql中的使用

BTree的结构 BTree是B-Tree的变种,实际结构如图 绿色框框起来的部分,是索引部分,仅仅起到索引数据的作用,不存储数据。红色框框起来的部分,是数据存储部分,在其叶子节点中要存储具体的数据 BTree的特点 所有…

vue学习10

1.GPT和Copilot Copilot Tab接受 删除键,不接受 ctrlenter更多方案 更适合的是修改方向 const submitForm async () > {//等待校验结果await formRef.value.validate()//提交修改await userUpdateInfoService(form.value)//通知user模块,进行数据更…

我的新书《青少年Python趣学编程(微课视频版)》出版了!

🎉 激动人心的时刻来临啦! 🎉 小伙伴们久等了,我的第一本新书 《青少年Python趣学编程(微课视频版)》 正式出版啦! 📚✨ 在这个AI时代,市面上的Python书籍常常过于枯燥&…