欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 健康 > 养生 > 架构设计系列(二):CI/CD

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

2025/2/20 14:28:44 来源:https://blog.csdn.net/qq_31366767/article/details/145613435  浏览:    关键词:架构设计系列(二):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用于事件调度和处理,根据优先级通知相关人员。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词