为什么CI和CD需要分道扬镳?(cd为什么叫cd)
ccwgpt 2024-09-26 08:08 20 浏览 0 评论
探索持续提升(Continuous Promotion)如何解决传统 CI/CD 流水线的局限性。
译自 Why CI and CD Need to Go Their Separate Ways,作者 Christian Hernandez。
在不断发展的软件开发领域,持续集成 (CI) 和持续交付 (CD) 一直是高效可靠的应用程序部署的基本方法。
尽管它们已经存在了很长时间,但像 Kubernetes 和 GitOps 这样的现代技术带来了传统 CI/CD 流程 无法解决的复杂性。 随着 Kubernetes 提供异步部署机制,GitOps 提供管理应用程序状态的声明式方法,两者之间出现了差距。
持续推广和相关工具旨在弥合这些差距,在以 GitOps 为中心的 环境中简化 CI/CD 流水线。
CI 和 CD 是软件开发中的基本实践,旨在提高部署应用程序的速度和可靠性。最初,CI/CD 是一个线性过程:构建代码、测试代码,然后将其部署到目标环境。这种方法适用于传统的虚拟机或物理服务器,因为在这些服务器中,部署环境相对静态。
然而,容器和 Kubernetes 的引入极大地改变了这一格局。Kubernetes 提供了一种更加动态的异步部署机制,这与传统 CI/CD 流程的同步性质不匹配。因此,团队开始采用 GitOps 来更好地适应这种新范式,并试图减轻与传统 CI/CD 流程的脱节。
尽管取得了这些进步,但 CI/CD 流程在很大程度上保持不变,导致跨不同环境管理部署的效率低下和复杂性。这种持续的演变凸显了对持续推广等更加集成化的解决方案的需求,以有效地弥合这些差距。
当前模型的挑战
当前的 CI/CD 模型面临着若干挑战,尤其是在 采用 Kubernetes 和 GitOps 的情况下。
问题的症结在于传统 CI/CD 流程的同步性质与 Kubernetes 部署的异步性质之间存在固有的脱节。这种不匹配通常会导致效率低下,因为部署流水线中充斥着自定义脚本和变通方法,以弥合 CI 和 CD 之间的差距。
此外,GitOps 虽然可以有效地管理部署的最后一英里,但无法处理复杂的多环境编排。它只关注最终的部署状态,在跨不同阶段或环境协调部署方面留下了巨大的运营空白。
这导致 CI 流水线过度扩展,并承担了它们从未设计过的角色,例如管理无限期部署和处理复杂的依赖关系。这些挑战凸显了对一种更具凝聚力的方法的需求,这种方法可以与现代技术无缝集成,从而提供更加灵活高效的部署流程。
CI/CD 中的复杂性
线性与复杂现实
将 CI/CD 视为一个简单的线性过程的传统观点掩盖了现代软件开发中面临的复杂现实。虽然最初被概念化为一系列步骤——构建、测试和部署——但实际的部署流水线要复杂得多。现代应用程序通常涉及许多相互关联的服务,每个服务都有自己的依赖关系和生命周期。
线性模型难以适应这些复杂性,导致必须管理相互依赖关系和异步流程的网络。此外,微服务架构 的兴起进一步加剧了这种复杂性,因为每个服务都可能有自己的 CI/CD 流水线,并具有不同的需求和触发器。
这种复杂性会导致部署瓶颈、人工干预增加以及难以在不同环境中保持一致性等问题。此外,对持续监控的需求以及处理动态云环境中快速变化的能力,都需要比传统线性方法所能提供的模型更加灵活和自适应的模型。适应这种复杂的现实对于有效的 CI/CD 实施至关重要。
过度使用 CI 执行 CD 任务
在许多组织中,CI 流水线的功能超出了其预期功能,承担了传统上属于 CD 领域的任务。
CI 的设计目的是自动化构建和测试代码,专注于创建可靠的工件。然而,随着部署环境复杂性的增加,CI 流程通常背负着环境配置、配置管理和部署编排等任务。
这种过度扩展会导致繁琐、低效的持续集成管道,它难以管理现代化动态部署的需求。这种错误使用不仅增加了持续集成管道的复杂性和维护开销,还导致循环时间更长、灵活性降低。解决这个问题需要在持续集成和持续交付之间明确划分职责,利用适当的工具让每个流程专注于其核心目标,而无需不必要的重叠。
引入持续提升(Continuous Promotion)
持续提升这一概念旨在弥合 CI 和 CD 之间的差距,解决在使用 Kubernetes 和 GitOps 等现代技术时传统 CI/CD 流水线的局限性。
其理念是插入一个中间步骤,专注于根据预定义的规则和条件提升工件。这种方法允许对部署过程进行更精细的控制,确保工件仅在满足特定条件(例如通过某些测试或获得必要的批准)时才会被提升。
通过这样做,持续提升将 CI 和 CD 流程分离,使每个流程都可以专注于其核心职责,而不会过度扩展。这不仅简化了部署流水线,还提高了整个流程的可靠性和效率。持续提升的需求源于现代部署日益增长的复杂性,在这些部署中,传统的 CI/CD 方法难以有效地管理云原生环境的异步和动态特性。
持续提升的优势
持续提升具有多种优势,可以提高部署流水线的效率和可靠性。
在 CI 和 CD 之间引入系统性步骤可确保只有合格的工件才能通过流水线,从而降低错误部署的风险。这种方法允许实施详细的规则集,其中可以包含成功完成测试、手动批准或合规性检查等条件。因此,持续提升可以更好地控制部署过程,使团队能够自动执行原本需要手动干预的复杂决策过程。
此外,它还减轻了 CI 流水线的负担,这些流水线通常因处理非其设计用途的部署任务而超载。这种关注点分离允许更专注、更高效的 CI 流程,而 CD 可以专注于应用程序的部署和管理。
总的来说,持续提升更符合现代云原生环境的动态特性,有助于实现更顺畅、更可靠的应用程序推出。
Kargo:一种新方法
Kargo 是一款开源工具,旨在 CI/CD 流水线中实施持续提升的概念。它通过提供结构化的变更提升机制,解决了在 Kubernetes 和 GitOps 环境中部署应用程序相关的复杂性。
Kargo 通过监控工件(例如应用程序映像或配置文件)的变更并应用预定义的提升规则来确定这些工件是否应进入部署的下一阶段来运作。该工具通过引入用于管理提升的声明式框架,有效地弥合了 CI 和 CD 之间的差距,确保只部署经过审查的变更。
Kargo 不会取代现有的 CI 或 CD 工具,而是通过添加一个专注于协调工件提升的中间层来增强它们。通过这样做,它有助于促进更可靠、更高效的部署流程,减少管理复杂部署所需的手动工作量,并更好地适应云原生生态系统的异步特性。
使用 Kargo 进行持续提升
Kargo 通过充当协调 CI/CD 流水线中工件提升的中间层来促进持续提升。它通过持续监控存储库中的变更(例如代码、配置或 Docker 映像的更新)来运作。
根据预定义的规则和条件,Kargo 会评估这些变更是否满足提升条件。此评估会考虑成功测试结果、合规性检查和必要的批准等因素。一旦满足条件,Kargo 就会自动执行提升过程,更新 GitOps 存储库以反映新状态,并通过 Argo CD 等 GitOps 控制器触发部署。
这种方法最大限度地降低了部署未经验证的变更的风险,确保了更高水平的部署可靠性和效率。通过使用 Kargo,团队可以减少手动干预并简化其部署流程,从而使 CI 工具能够专注于构建工件,而 CD 工具则可以管理推出。这种集成使 Kargo 成为现代动态部署环境中的重要组成部分。
开始使用 Kargo 进行持续提升之旅
您是准备尝试 Kargo 的 GitOps 从业者吗?请访问 Kargo GitHub 页面,开始您的持续提升之旅。已经是 Kargo 用户并希望将其提升到一个新的水平?注册我们的 Kargo Enterprise 早期访问。
相关推荐
- MFC、Qt、WPF?该用哪个?(mfc和wpf区别)
-
MFC、Qt和WPF都是流行的框架和工具,用于开发图形用户界面(GUI)应用程序。选择哪个框架取决于你的具体需求和偏好。MFC(MicrosoftFoundationClass)是微软提供的框架,...
- 一款WPF开发的通讯调试神器(支持Modbus RTU、MQTT调试)
-
我们致力于探索、分享和推荐最新的实用技术栈、开源项目、框架和实用工具。每天都有新鲜的开源资讯等待你的发现!项目介绍Wu.CommTool是一个基于C#、WPF、Prism、MaterialDesign...
- 关于面试资深C#、WPF开发工程师的面试流程和问题
-
一、开场(2-3分钟)1.欢迎应聘者,简单介绍公司和面试流程。2.询问应聘者是否对公司或岗位有初步的问题。二、项目经验与技术应用(10-20分钟)1.让应聘者详细介绍几个他参与过的C#、...
- C# WPF MVVM模式Prism框架下事件发布与订阅
-
01—前言处理同模块不同窗体之间的通信和不同模块之间不同窗体的通信,Prism提供了一种事件机制,可以在应用程序中低耦合的模块之间进行通信,该机制基于事件聚合器服务,允许发布者和订阅者之间通过事件进行...
- WPF 机械类组件动画制作流程简述(wps上怎么画机械结构简图)
-
WPF机械类组件动画制作流程简述独立观察员2025年3月4日一、创建组件创建组件用户控件,将组件的各部分“零件”(图片)拼装在一起,形成组件的默认状态:二、给运动部分加上Rend...
- C#上位机WinForm和WPF选哪个?工控老油条的"血泪史"
-
作为一个从互联网卷进工控坑的"跨界难民",在这会摸鱼的时间咱就扯一下上位机开发选框架这档子破事。当年我抱着WPF的酷炫动画一头扎进车间,结果被产线老师傅一句"你这花里胡哨的玩意...
- 【一文扫盲】WPF、Winform、Electron有什么区别?
-
近年来,随着软件开发的不断发展,开发人员面临着选择适合他们项目的各种框架和工具的挑战。在桌面应用程序开发领域,WPF、Winform和Electron是三个备受关注的技术。本文将介绍这三者的区别,帮助...
- 一个开源、免费、强大且美观的WPF控件库
-
我们致力于探索、分享和推荐最新的实用技术栈、开源项目、框架和实用工具。每天都有新鲜的开源资讯等待你的发现!项目介绍HandyControl是一套基于WPF(WindowsPresentationF...
- WPF 根据系统主题自动切换浅色与深色模式
-
WPF根据系统主题自动切换浅色与深色模式控件名:Resources作者:WPFDevelopersOrg-驚鏵原文链接[1]:https://github.com/WPFDevelopers...
- WPF与WinForm的本质区别(wpf与maui)
-
在Windows应用程序开发中,WinForm和WPF是两种主要的技术框架。它们各自有不同的设计理念、渲染机制和开发模式。本文将详细探讨WPF与WinForm的本质区别,并通过示例进行说明。渲染机制W...
- Win10/Win11效率神器再进化:微软发布PowerToys 0.90.0版本
-
IT之家4月1日消息,微软今天(4月1日)更新PowerToys,在最新发布的0.90.0版本中,修复多个BUG之外,引入多项功能更新,为Windows10、Windows...
- 一款非常漂亮的WPF管理系统(wpf架构及特性)
-
我们致力于探索、分享和推荐最新的实用技术栈、开源项目、框架和实用工具。每天都有新鲜的开源资讯等待你的发现!WPFManager项目介绍该项目是一款WPF开发的管理系统,数据库采用的MSSqlserv...
- WPF 实现描点导航(wpf按钮的点击事件)
-
WPF实现描点导航控件名:NavScrollPanel作者:WPFDevelopersOrg-驚鏵原文链接[1]:https://github.com/WPFDevelopersOrg/WPF...
- 微软更新基于Win11的Validation OS 2504:增强 .NET与WPF
-
IT之家5月1日消息,科技媒体NeoWin今天(5月1日)发布博文,报道称微软公司更新基于Windows11的ValidationOS,增强支持.NET和WPF,并优...
- WPF的技术架构与优势(wpf的前景)
-
WindowsPresentationFoundation(WPF)是一个现代化的用户界面框架,专为构建Windows应用程序而设计。它通过分层的技术架构和丰富的功能集,提供了全面的应用程...
你 发表评论:
欢迎- 一周热门
- 最近发表
- 标签列表
-
- MVC框架 (46)
- spring框架 (46)
- 框架图 (58)
- bootstrap框架 (43)
- flask框架 (53)
- quartz框架 (51)
- abp框架 (47)
- jpa框架 (47)
- laravel框架 (46)
- express框架 (43)
- springmvc框架 (49)
- 分布式事务框架 (65)
- scrapy框架 (52)
- java框架spring (43)
- grpc框架 (55)
- orm框架有哪些 (43)
- ppt框架 (48)
- 内联框架 (52)
- winform框架 (46)
- gui框架 (44)
- cad怎么画框架 (58)
- ps怎么画框架 (47)
- ssm框架实现登录注册 (49)
- oracle字符串长度 (48)
- oracle提交事务 (47)