Alexu
发布于 2025-07-09 / 0 阅读
0
0

什么是cicd

什么是 CI/CD?它如何帮助我们更快地交付?值得我们为此付出努力吗?在本期,我们将探讨持续集成和持续部署(简称 CI/CD)。CI/CD 有助于自动化软件开发流程,从最初的代码提交到部署。它消除了传统上将代码交付到生产环境所需的大量人工干预。

CI/CD 流程构建、测试并将代码部署到生产环境。它承诺帮助软件团队更快地部署更高质量的软件。这听起来很棒,但它在实际应用中真的有效吗?答案是——视情况而定。 

让我们将 CI/CD 分解成各个部分并分别讨论它们。 


持续集成(CI)

持续集成 (CI) 是一种开发实践,许多人认为他们在工作中正在使用它,但他们并不完全了解它。 

在 CI 出现之前,开发团队通常各自为政,各个开发人员长期独立开发不同的功能。他们的工作最终需要合并到一个共享的代码库中,这常常会导致数百个文件和贡献者之间出现合并冲突和兼容性问题等复杂情况。这种困境通常被称为“合并地狱”,代表了传统开发方法所面临的困境。

避免“合并地狱”

让我们设想一个场景,有两个开发人员,Alice 和 Bob。Alice 编写代码,一旦获得一个功能正常且不会引发任何问题的版本,即使它尚未完全完成,她也会立即将其共享。她将代码上传到中央存储库。Bob 遵循相同的方法,始终在开始工作之前获取最新版本的代码。随着 Alice 不断更新代码,Bob 也采取相同的做法。如果 Bob 进行了更改,Alice 会将其顺利地整合到她的工作中。由于他们始终使用最新代码,因此他们合作顺畅,相互干扰的可能性很小。如果他们遇到冲突,通常是由于他们最近所做的更改,因此他们可以坐下来一起解决问题,然后继续前进。 

然而,随着如此多的人不断贡献代码,问题在所难免。事情并不总是顺利进行,新的错误也时有发生。那么,解决方案是什么呢? 

自动化 

解决方案是自动化。它就像一只警惕的看门狗,持续监控代码。每当发生变更,它就会立即行动,抓取代码、构建代码并运行测试。如果在此过程中出现任何问题,团队都会收到警报,确保每个人都能及时发现问题。有了这个安全网,持续集成就成为现实。

那么,持续集成(CI)到底是什么?

定义

持续集成涉及自动构建、执行测试以及将各个开发人员的代码合并到共享存储库中。持续集成的主要目标是高效地将源代码集成到共享存储库中。将更改提交到版本控制系统后,将执行自动构建和测试用例,以确保代码的功能性和有效性。这些过程验证源代码的编译情况以及测试用例在执行过程中的执行情况。

工具

CI 中常用的工具有哪些?强大的源代码管理系统是基础。GitHub就是一个很受欢迎的例子。它包含构建软件所需的一切,包括源代码、测试脚本以及构建软件应用程序的脚本。 

有许多工具可用于管理 CI 流程本身。GitHub ActionsBuildkite是较新的例子,而Jenkins CircleCITravisCI也被广泛使用。这些工具管理 CI 中的构建和测试任务。 

目前有许多用于编写和运行测试的测试工具。这些工具通常针对特定语言和生态系统。例如,在 JavaScript 中,Jest是一个单元测试框架,而PlaywrightCypress是 Web 应用程序的常见集成测试框架。 

构建工具更加多样化,并且针对特定生态系统。Gradle是一款强大的 Java 构建工具。JavaScript 构建生态系统碎片化严重,难以追踪。Webpack是标准,但许多新的构建工具声称速度更快,尽管它们的可扩展性尚不及 Webpack。 

持续集成的好处

持续集成之所以如此重要,有几个原因。下表列出了 CI 的一些主要优势。 

持续部署(CD)

持续部署 (CD) 是 CI/CD 流水线中 CI 之后的下一步。CD 是一种将通过自动化测试阶段的每项代码更改自动部署到生产环境的实践。

虽然真正的持续部署具有挑战性并且不像 CI 那样被广泛采用,但更常见的做法是持续交付,它与 CI 类似但有细微的差别,如下所述。

持续交付

持续交付专注于将代码变更快速部署到生产环境中。它的根源可以追溯到《敏捷宣言》,该宣言强调“尽早并持续交付有价值的软件” ,以满足客户需求。 

持续交付的目标是高效地将有价值的代码变更迁移到生产环境中。第一步是通过构建流程将代码转化为可部署的软件。软件准备就绪后,下一步看似合乎逻辑,实际上是将其直接部署到生产环境中。然而,实际操作中需要进行严格的测试,以确保只有稳定的软件才能进入生产环境。

通常,组织会维护多个测试环境,例如“QA”、“性能”或“Staging”。这些环境充当软件投入生产之前的检查点。软件在每个环境中都会接受测试,以确保其已准备好部署。

本质上,持续交付的生产过程涉及在部署到生产环境之前通过各种测试环境转换软件。

持续交付的一个关键方面是确保代码始终保持可部署状态。交付流程完成后,代码即可部署到任何所需环境。这个端到端流程包括构建源代码、执行测试用例、生成 WAR 或 JAR 文件等工件,以及将其交付到特定环境。

自动部署

回到持续部署 (CD),它涉及将代码更改自动部署到生产环境。本质上,CD 代表了开发流程的最后阶段。在此阶段,不仅要准备工件并执行测试用例,而且还要将工件部署到生产环境。持续部署确保对代码所做的任何更改都能及时部署到生产环境,无需人工干预。

持续部署与持续交付

持续部署和持续交付是两个相关的概念,但它们之间有着明显的区别。以下列出了一些区别:

虽然持续部署可能适合某些组织,但持续交付是许多组织努力实现的方法,因为它为软件交付提供了一种谨慎而自动化的方法。

工具

我们之前提到的工具,例如 GitHub Actions、Buildkite 和 Jenkins,都是处理持续交付 (CD) 任务的常用工具。特定于基础设施的工具也使持续交付 (CD) 更易于维护。例如,ArgoCD在 Kubernetes 上很受欢迎。 

CI/CD 是一种强大的软件开发实践,可以帮助团队更快地交付更高质量的软件。然而,它并非万能的解决方案,其实施可能会因系统的复杂程度而异。 

持续部署的好处

持续部署为组织带来了诸多好处。以下我们列出了其中一些。


评论