Coursera 笔记

Module 02 · DevOps & CI/CD开发运维与持续集成·持续交付

What Is CI/CD?什么是 CI/CD?

Coursera ↗

学习目标

观看本视频后,你将能够:

  • 解释 持续集成(CI) 和 持续交付(CD) 的概念
  • 描述 持续集成(CI) 和 持续交付(CD) 的关键区别
  • 说明 CI/CD 的主要优点

持续集成(CI)与持续交付(CD)有何不同?

许多人将 CI/CD 视为一个单一的过程,但实际上,持续集成(CI) 和 持续交付(CD) 是两个独立且不同的过程,通常是 顺序进行 的。

持续集成(CI)

持续集成是将你的代码持续地集成到主分支、主干或主代码库中,避免在合并代码时发生过大的偏离。确保你始终将代码与主代码库保持同步,及时合并以确保一切正常工作。

持续交付(CD)

持续交付则是将已经集成的代码部署到某个环境中。你可以选择每次集成后都进行部署,或者不每次都部署。

  • 持续集成 可能会用于测试分支和拉取请求(pull requests)。
  • 当代码最终合并到主分支时,启动 持续交付 过程。

持续集成(CI)和持续交付(CD)的定义

持续集成(CI)

CI 是一个自动化过程,允许你将工作成果集成到版本库中。

  • 通过 CI,你可以和团队一起开发应用程序,快速发现并修复代码中的错误。
  • 团队可以在不同区域进行小范围的开发,并定期将代码合并到主分支中。

持续交付(CD)

持续交付是 持续集成 之后的下一个阶段。它准备好代码并自动化了部署和构建应用程序的过程。


CI/CD 过程的不同阶段

持续集成(CI)阶段

持续集成由以下几个阶段组成:

  1. 计划(Plan)
  2. 编码(Code)
  3. 构建(Build)
  4. 测试(Test)

在这些阶段中,开发人员计划并编写代码,然后将其构建并反复测试,直到完成最终解决方案。

持续交付(CD)阶段

持续交付则包括以下阶段:

  1. 发布(Release)
  2. 部署(Deploy)
  3. 运营(Operate)

在这些阶段中,解决方案被发布,二进制文件被部署到特定环境中,并进行反复的迭代,直到解决方案投入实际运营。


CI/CD 与持续部署(Continuous Deployment)的区别

持续交付(CD)与持续部署(Continuous Deployment)

  • 持续交付:指将代码部署到开发服务器、测试服务器、预生产环境等,而不是直接部署到生产环境。
  • 持续部署:是将代码自动化部署到生产环境。这意味着每次代码变化都会直接影响生产环境。

尽管这两个术语的含义非常接近,但它们 并不相同。

  • 持续交付 主要指将代码交付到生产以外的环境。
  • 持续部署 则意味着代码直接部署到生产环境。


CI/CD 在 DevOps 流水线中的位置

DevOps 流水线通常包括以下阶段:

  • 计划(Plan)
  • 开发(Develop)
  • 构建(Build)
  • 测试(Test)
  • 部署(Deploy)

在 DevOps 流水线中,CI/CD 主要处于 构建(Build) 和 测试(Test) 阶段,负责代码的自动构建、集成、测试和部署。


CI/CD 的主要优点

  1. 更快的响应时间:
    通过 CI/CD,你不再需要等待代码变更的效果,因为变更会自动进行构建、测试和部署。
  2. 减少代码集成风险:
    频繁地集成代码意味着变更的时间间隔变短,从而减少了出现问题的风险。
  3. 提高代码质量:
    CI/CD 过程中的持续检查和测试确保了代码的高质量。每次 拉取请求 都是一个 代码审查 的机会。
  4. 更高的可部署性:
    确保主分支的代码随时可部署,这是 CI/CD 的常见做法,能够提高代码的稳定性。
  5. 更快的部署时间:
    由于所有测试都已通过,且部署自动化,因此部署过程变得更快,且具有更好的可重复性。

总结回顾

在本视频中,你学到了:

  • CI/CD 不是一个单一过程,而是两个 独立且不同 的过程,它们是 顺序执行 的。
  • 持续集成(CI) 是一个自动化过程,允许开发者将代码持续集成到主分支中。
  • 持续交付(CD) 是持续集成之后的阶段,将集成的代码部署到开发、测试或预生产环境中。
  • 持续部署(Continuous Deployment) 是将代码部署到生产环境中。
  • CI 包括 计划、编码、构建 和 测试 阶段。
  • CD 包括 发布、部署 和 运营 阶段。
  • CI/CD 在 DevOps 流水线中主要位于 构建 和 测试 阶段。
  • CI/CD 带来了更快的响应速度、减少了集成风险、提高了代码质量、减少了部署时间等多个优点。