了解持续集成和持续部署

你是否听说过 CI/CD,但不确定它究竟是什么?

理想情况下,软件工程师编写的代码需要被部署到生产环境中,以便需要该产品的企业可以使用它。为了满足业务需求(通常指的是用户/客户),确保产品没有缺陷至关重要。

软件工程师通常采用的方法是在分支中工作,并创建一个拉取请求,这个请求会使用新更新来更新主分支。我们通常会编写测试来确保新的变更不会引入错误。在大多数情况下,当开发人员在处理某个功能时,他们通常在完全完成该功能之前不会创建拉取请求。当他们准备好提交时会发生什么呢?

  • 他们会花费大量时间试图使他们的代码库与他们在工作期间主分支上发生的更改保持同步。
  • 为此,他们必须解决一系列合并冲突。
  • 他们也有可能破坏主分支,这会继续影响那些在问题被发现和解决之前从分支中拉取代码的人。

如果你曾经遇到过这种情况,你肯定会同意这真的很痛苦——没有人希望这样度过他们的工作日。

那么,解决方案是什么呢?

持续集成

为了避免我上面提到的问题,工程团队可以采用一种称为持续集成的方法——顾名思义,它涉及将开发人员所做的代码更改持续集成到一个共享的分支/存储库中。要集成的代码必须经过验证测试,以确保它不会破坏应用程序。只有当测试通过时,代码才会被集成。

为了更好地理解这一点,让我们想象一个由 10 名开发人员组成的团队的真实场景。这些开发人员在本地创建一个分支,他们在其中编写代码来实现某些功能。他们不会等到功能完全完成后再发送拉取请求,而是选择在几乎没有做任何更改时就发送。例如,开发人员正在开发一个允许用户在应用程序中管理单个任务的功能,他们创建一个新的模型。开发人员没有等到任务功能完成,而是坚持持续集成模式,将这个微小的变化(与他们正在做的事情相比)提交并创建一个拉取请求以合并到代码中。

在集成此新变更之前,必须运行一系列测试。

软件工程团队使用诸如 Travis CI 这样的工具来创建这些集成过程和测试。使用这样的工具,测试是自动化的,因此只要将拉取请求提交到设置期间选择的目标分支,测试就会运行。

测试结果会被生成,创建拉取请求的开发人员可以看到结果并进行必要的更改。坚持这种尽可能少量地集成代码的模式,以及运行经过验证的测试的好处是:

  • 相关团队有可能知道是什么导致构建过程或测试失败。这减少了将错误发送到生产环境的可能性。
  • 如果团队使流程自动化,他们将有更多的时间专注于提高生产力。

在这种做法中需要注意的重要一点是,它鼓励团队经常将代码推送到主分支。如果团队的其他成员没有从主分支中拉取更新他们的本地存储库,那么这样做将是无效的。

测试类型

在编写将成为集成过程一部分的测试时,以下是一些可以在该过程中实现的测试:

  • 集成测试——它将软件的各个单元组合在一起,并作为一个整体进行测试。
  • 单元测试——它测试软件的单个单元或组件,例如方法或函数。
  • UI 测试——从用户的角度验证软件是否运行良好。
  • 验收测试——测试软件是否满足业务要求。

请务必注意,你不需要测试所有这些,因为其中一些可能已经包含在开发人员编写的代码中。

持续集成工具

无需深入探讨,你可以在当前或新项目中开始使用以下工具:

  • Travis CI – 在开源世界中享有盛誉,并承诺在几分钟内无缝测试你的代码。
  • CircleCI – 为你提供强大的功能、灵活性和控制能力,以实现从控制到部署的流程自动化。
  • Jenkins – 提供数百个插件来支持构建、部署和自动化任何项目。

如果你是 Jenkins 的新手,那么我建议你使用这个 Udemy 课程,使用 Java 和 .NET 学习 CI。

持续部署

如果你构建的功能在部署到生产环境之前在存储库中放置数周或数月,那又有什么意义呢?尽管工程团队可以努力将小的更改集成到主分支中,但他们也应该尽快将这些更改推送到生产环境中。

实践持续部署的目标是,一旦开发人员将这些更改集成到主分支中,就可以将这些更改传递给用户。

与持续集成的情况一样,在使用持续部署时,也会设置自动化测试和检查,以确保验证新集成的更改。只有当这些测试通过时,才会进行部署。

为了使团队从持续部署的实践中受益,他们需要具备以下条件:

  • 自动化测试是所有持续工程实践的基本支柱。在持续部署的情况下,要部署的代码必须符合团队为他们打算向最终用户推出的内容而制定的标准。理想情况下,如果新更改低于阈值,则测试应该失败,并且代码不会被集成。否则,代码会被集成。
  • 尽管有背靠背的自动化测试,但一些错误可能会进入生产环境。为此,团队需要能够撤消所做的更改——回滚部署。这应该将生产代码恢复到进行新更改之前的状态。
  • 需要监控系统来跟踪已推送到生产环境的更改。这就是团队如何能够跟踪用户在使用已部署的更改时遇到的错误。

上面提到的持续集成工具也为你提供了设置持续部署系统的功能。关于这方面,你也可以阅读很多资料。

结论

开发团队的生产力对于业务的成功至关重要。为了确保他们富有成效,必须采用鼓励这种做法的方式。持续集成和部署就是这种做法的例子。

通过持续集成,团队可以每天推送尽可能多的代码。在实现这一点后,尽快将新添加的更改部署给用户就变得很容易。部署这些更改可以从用户那里获得反馈。最终,企业将能够根据收到的反馈进行创新,这对每个人来说都是双赢的。

你还可以学习如何扩展和优化 CI/CD。

如果你是开发人员并且对学习 CI/CD 感兴趣,请查看这个 精彩课程

喜欢这篇文章吗?与世界分享一下吧!