CI/CD 管道:GCP Cloud Build 简介

2025-05-25

CI/CD 管道:简单介绍

GCP 云构建

您想快速交付无 Bug 的代码吗?快速可靠的 CI/CD 流水线对于长期持续交付至关重要。

什么是 CI/CD 管道?

CI/CD 流水线可帮助您自动化软件交付流程中的步骤,例如启动代码构建、运行自动化测试以及部署到暂存环境或生产环境。自动化流水线可消除人为错误,提供标准化的开发反馈循环,并实现快速的产品迭代。

CI 和 CD 是什么意思?

CI 是持续集成 (Continuous Integration) 的缩写,是一种软件开发实践,所有开发人员每天多次将代码更改合并到中央存储库中。CD 是持续交付 (Continuous Delivery) 的缩写,它在持续集成的基础上增加了自动化整个软件发布流程的实践。

使用 CI,每次代码变更都会触发指定项目的自动构建和测试序列,并向进行变更的开发人员提供反馈。整个 CI 反馈循环应该在 10 分钟内完成。

持续交付包括基础设施的配置和部署,这些工作可能由多个阶段组成,且需要手动完成。重要的是,所有这些流程都是完全自动化的,每次运行都会被完整记录,并向整个团队公开透明。

CI/CD 管道的元素

CI/CD 流水线听起来像是高开销,但实际上并非如此。它本质上是一份可运行的规范,列出了交付新版本软件产品所需执行的步骤。如果没有自动化流水线,工程师仍然需要手动执行这些步骤,因此效率会大大降低。

大多数软件发布都会经历几个典型阶段:

CI/CD 管道阶段

每个阶段的失败通常会触发通知(通过电子邮件、Slack 等方式),告知负责的开发人员原因。否则,通知通常配置为每次成功部署到生产环境后发送给整个团队。

源阶段

大多数情况下,流水线运行由源代码存储库触发。代码更改会触发向 CI/CD 工具发送通知,该工具会运行相应的流水线。其他常见的触发因素包括自动调度或用户启动的工作流,以及其他流水线的结果。

构建阶段

我们将源代码及其依赖项组合起来,构建产品的可运行实例,以便最终交付给最终用户。用 Java、C/C++ 或 Go 等语言编写的程序需要编译,而 Ruby、Python 和 JavaScript 程序则无需此步骤。

无论使用哪种语言,云原生软件通常都使用 Docker 部署,在这种情况下,CI/CD 管道的这个阶段会构建 Docker 容器。

未能通过构建阶段表明我们的项目配置存在根本问题,最好立即解决它。

测试阶段

在此阶段,我们会运行自动化测试来验证代码的正确性和产品行为的准确性。测试阶段就像一道安全网,可以防止易重现的错误影响到最终用户。

编写测试的责任落在开发人员身上,最好在测试或行为驱动开发过程中编写新代码时完成

根据项目的规模和复杂程度,此阶段可能持续数秒到数小时。许多大型项目会分多个阶段运行测试,从执行快速健全性检查的冒烟测试,到从用户角度测试整个系统的端到端集成测试。大型测试套件通常会并行运行以缩短运行时间。

测试阶段的失败会暴露出开发人员在编写代码时未曾预见到的代码问题。在此阶段,快速向开发人员提供反馈至关重要,因为问题空间仍然清晰地浮现在他们的脑海中,并且他们能够保持流畅的状态。

部署阶段

一旦我们构建了代码的可运行实例,并通过了所有预定义的测试,我们就可以部署它了。通常会有多个部署环境,例如产品团队内部使用的“beta”或“staging”环境,以及供最终用户使用的“生产”环境。

采用敏捷开发模型(由测试和实时监控引导)的团队通常会将正在进行的工作手动部署到暂存环境以进行额外的手动测试和审查,并自动将已批准的更改从主分支部署到生产环境。

CI/CD 管道示例

流水线的启动过程非常简单。以下是一个 Go 项目的流水线示例,它编译代码、检查代码风格并在两个并行作业中运行自动化测试:

Golang CI 管道

该管道由基于云的 CI/CD 服务Semaphore实现。

以下是构建、测试和部署微服务到 Kubernetes 集群的管道的更复杂示例:

Kubernetes CI/CD 管道

以下是构建方法:

Semaphore 文档提供了更多 CI/CD 管道的示例

管道的额外好处

拥有 CI/CD 流水线比简单地使以前所做的事情更有效率有更多积极的影响:

  • 开发人员可以专注于编写代码和监控生产系统中的行为。
  • QA 和产品利益相关者可以轻松访问系统的最新版本或任何版本。
  • 产品更新没有压力。
  • 所有代码更改、测试和部署的日志均可随时检查。
  • 出现问题时回滚到以前的版本是常规的按钮操作。
  • 快速反馈循环有助于建立学习和责任的组织文化。

祝您搭建愉快!

文章来源:https://dev.to/markoa/ci-cd-pipeline-a-gentle-introduction-2n8k
PREV
持续集成详解
NEXT
使用 Vue、Bulma 和 Airtable 构建作品集网站